Create Sweep V1
Submit a batch parameter sweep (one Cartesian grid of operating points).
Every grid point is one powertrain solve; a sweep can range from a handful to the 10,000-point ceiling.
Submit the grid as ONE sweep rather than N single-point POSTs: the batch is prepared once and reused across every compatible point, so a large grid returns far sooner than the same points submitted one at a time. One request replaces N, with no offsetting cost.
It is not a price advantage. A sweep bills one compute unit per evaluation point per physical rotor — the same as running those points individually — so a 400-point grid on a quad costs 1,600 CU either way. Two limits bound a submission: at most 10,000 points per sweep, and rotors x points <= max_sweep_work for the caller's plan (422 sweep_limit_exceeded names the plan's ceiling and the requested figure).
Example — one numeric axis (7 points)::
POST /v1/sweeps
Idempotency-Key: <uuid>
{
"project_id": "proj_…",
"rotors": [{"label": "Main",
"motor_component_id": "comp_…",
"propeller_component_id": "comp_…",
"throttle_pct": 100}],
"battery_component_id": "comp_…",
"density_kg_m3": 1.225,
"airspeed_m_s": 0,
"cooling_source": "prop_slipstream",
"sweep": {"throttle": {"mode": "range", "start": 40, "stop": 100, "steps": 7},
"rotor_sweep_mask": [true]}
}
Example — a propeller axis crossed with throttle (20 x 13 = 260 points)::
POST /v1/sweeps
Idempotency-Key: <uuid>
{
"project_id": "proj_…",
"rotors": [{"label": "Main",
"motor_component_id": "comp_…",
"propeller_component_id": "comp_…",
"throttle_pct": 100}],
"battery_component_id": "comp_…",
"density_kg_m3": 1.225,
"airspeed_m_s": 0,
"sweep": {
"throttle": {"mode": "range", "start": 40, "stop": 100, "steps": 13},
"rotor_sweep_mask": [true],
"component_axes": [
{"axis": "propeller", "slots": [0],
"component_ids": ["comp_…", "comp_…", "…20 ids…"]}
]
}
}
A component axis is a full grid dimension: it crosses every numeric axis, so the example above solves each of the 20 propellers at all 13 throttles. slots names the rotor positions the chosen component is swapped into — list more than one to move them together as ONE shared dimension rather than a cross-product. Each point's inputs.component[] names which component it used, and GET /v1/sweeps/{id} echoes the axis as component id + name references.
Returns 202 Accepted with the sweep resource (total_points, completed_points, credits_breakdown); poll GET /v1/sweeps/{id} or stream progress via SSE.
Request
- Base URL: https://thrustlab.com
- URL: https://thrustlab.com/v1/sweeps
- Auth: HTTP bearer
Headers
Unique key (max 255 chars) making this POST safe to retry. Required on all v1 write requests; replays return the cached response.
Request body
Response
Successful Response
Changes
No recorded changes to this operation across all 1 revision of this API.