---
title: "List Sweeps V1"
method: GET
path: "/v1/sweeps"
tags: ["v1", "sweeps"]
---

# List Sweeps V1

`GET /v1/sweeps`

## Request

- Base URL: `https://thrustlab.com`
- URL: `https://thrustlab.com/v1/sweeps`
- Auth: HTTP bearer

List parameter sweeps owned by the caller with cursor pagination.

## Query parameters

- `project` string, nullable
- `status` string, nullable
- `cursor` string, nullable
- `limit` integer

## Response `200`

Successful Response

- SweepListResponse
  - `data` SweepResource[], required
    - `analysis_type` string, required
    - `battery_component_id` string, required
    - `cancel_requested_at` string, nullable: When a cancel was requested for a RUNNING sweep. The status stays `running` until the worker honours it at its next point, keeping the points already solved. Null when no cancel was requested; a QUEUED sweep cancels immediately instead and never sets this.
    - `completed_at` string, nullable: When the sweep reached a terminal state — completed, failed or canceled. Null until then.
    - `completed_points` integer, required
    - `created_at` string, nullable: When the sweep was submitted.
    - `credits_breakdown` SweepCreditsBreakdown: How this sweep's credit cost was arrived at. A sweep bills one compute unit per evaluation point per physical rotor, so `points * rotors * cu_per_point_per_rotor` is today's price. `total` is what was actually charged: a sweep submitted before the pricing change of 2026-09-03 was billed under a sub-linear curve and reports that lower figure, which is why the two can differ on an old run.
      - `cu_per_point_per_rotor` integer, required: Compute units billed per point per rotor.
      - `points` integer, required: Evaluation points in the grid.
      - `rotors` integer, required: Physical rotors the grid was solved for.
      - `total` integer, required: Credits actually charged for this sweep.
    - `credits_cost` integer, required
    - `dispatched_at` string, nullable: When the sweep was handed to the worker queue. Null while it is parked and has never been dispatched. NOT the start of execution: launch_intent=run dispatches at submit, so this can equal created_at while the sweep waits for a slot.
    - `error` object, nullable, required
    - `id` string, required
    - `input_snapshot` object, nullable
    - `inputs` SweepInputs, required
      - `airspeed_m_s` number, required
      - `battery_charge_pct` number, required
      - `density_kg_m3` number, required
      - `solver` string, required
    - `is_starred` boolean, required
    - `name` string, nullable, required
    - `object` 'sweep', required
    - `plot_config_json` object[], nullable, required
    - `progress` number, nullable, required
    - `project_id` string, required
    - `propeller_model` string
    - `rotor_groups` RotorGroupResource[], required
      - `coax_position_m` number
      - `coax_stack_id` integer
      - `count` integer, required
      - `esc_motor_wire_resistance_mohm` number, required
      - `esc_pwm_frequency_khz` number
      - `esc_resistance_mohm` number, required
      - `esc_sync_rectification` boolean
      - `esc_timing` string
      - `esc_type` string, required
      - `label` string, required
      - `motor_component_id` string, nullable, required
      - `propeller_component_id` string, nullable
      - `propeller_label` object, nullable: The printed size a Fast-model rotor ran from: diameter_m, pitch_m, num_blades, family, chord_ratio, camber_pct, and optionally weight_g and max_rpm. Null on a Full-model rotor.
      - `rotation_sense` integer
      - `throttle_pct` number, required
    - `snapshot_version` integer
    - `solver_engine` string
    - `started_at` string, nullable: When a worker claimed the sweep and solving began. Null until then. started_at - dispatched_at is the wait for a slot; completed_at - started_at is the solve itself.
    - `status` 'draft' | 'queued' | 'running' | 'completed' | 'failed' | 'canceled', required
    - `summary` object, nullable, required
    - `sweep_config` object, nullable, required
    - `total_points` integer, required
  - `has_more` boolean, required
  - `next_cursor` string, nullable, required
  - `object` 'list', required

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