> ## Documentation Index
> Fetch the complete documentation index at: https://docs.uplift.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# List Captures

> Returns a paginated list of captures for the organization with optional filters. Results are sorted newest first. All organization captures are included unless filtered; use `source=api` to restrict to captures with `source` equal to `api`. A capture linked to multiple athletes may appear more than once in `captures[]`; `total_count` is the distinct capture count.

### Query parameters

All query parameters are optional. See the operation above for types and constraints.

| Parameter        | Purpose                                                                                                                                                           |
| ---------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **`athlete_id`** | UUID; restrict to captures for that athlete in your organization. Returns **400** `athlete_id not found` when the athlete is missing or not in your organization. |
| **`source`**     | When set to **`api`**, only captures with `source` equal to **`api`** are returned.                                                                               |
| **`status`**     | One of **`awaiting_upload`**, **`processing`**, **`completed`**, **`error`**.                                                                                     |
| **`activity`**   | Case-insensitive filter on `activity` (trimmed and lowercased for matching). Returned values preserve stored casing.                                              |
| **`movement`**   | Case-insensitive filter on `movement` (trimmed and lowercased for matching). Returned values preserve stored casing.                                              |
| **`limit`**      | Page size; integer **1–500**. Defaults to **100** when omitted. Out-of-range values return **400**.                                                               |
| **`offset`**     | Rows to skip; non-negative integer. Defaults to **0** when omitted. Negative values return **400**.                                                               |

### List behavior

* **Scope** — Returns all captures in your organization. Captures from other sources (for example, the mobile app) are included unless you pass **`source=api`**. Deleted captures are excluded.
* **Sort order** — Newest first (by capture time).
* **Duplicate rows** — A capture linked to more than one athlete can appear more than once in **`captures[]`**. **`total_count`** is the distinct capture count matching your filters.

Successful **`200`** responses include **`captures`** (array of `Capture`), **`total_count`**, **`offset`**, and **`limit`**. The response **`offset`** and **`limit`** echo the values used for the page (from the request, or defaults when omitted).

#### Movement dimensions

Each `Capture` in **`captures[]`** may include additional top-level dimension fields based on its `activity` and `movement`.

| Activity          | Movement                  | Dimensions                                        |
| ----------------- | ------------------------- | ------------------------------------------------- |
| `agility`         | `cutting`                 | `direction`                                       |
| `baseball`        | `hitting`                 | `bat_length`, `handedness`                        |
| `baseball`        | `pitching`                | `handedness`                                      |
| `basketball`      | `free_throw`              | `handedness`                                      |
| `basketball`      | `jump_shot`               | `handedness`                                      |
| `basketball`      | `layup`                   | `handedness`                                      |
| `golf`            | `swing`                   | `handedness`                                      |
| `jump`            | `broad`                   | `arm_position`                                    |
| `jump`            | `countermovement`         | `arm_position`                                    |
| `jump`            | `drop_vertical`           | `arm_position`                                    |
| `jump`            | `single_leg`              | `arm_position`, `footedness`                      |
| `jump`            | `single_leg_broad`        | `arm_position`, `footedness`                      |
| `jump`            | `squat`                   | `arm_position`                                    |
| `lunge`           | `forward`                 | `footedness`                                      |
| `lunge`           | `side`                    | `footedness`                                      |
| `range_of_motion` | `ankle_flexion`           | `body_position`, `footedness`                     |
| `range_of_motion` | `cervical_rotation`       | `direction`                                       |
| `range_of_motion` | `sfma_shoulder_extension` | `handedness`                                      |
| `range_of_motion` | `sfma_shoulder_flexion`   | `handedness`                                      |
| `range_of_motion` | `shoulder_9090`           | `handedness`                                      |
| `range_of_motion` | `shoulder_flexion`        | `handedness`                                      |
| `range_of_motion` | `t_spine_rotation`        | `handedness`                                      |
| `softball`        | `hitting`                 | `bat_length`, `handedness`                        |
| `softball`        | `pitching`                | `handedness`                                      |
| `squat`           | `single_leg`              | `footedness`                                      |
| `stability`       | `plank`                   | `plank_orientation`, `plank_position`             |
| `stability`       | `rotary`                  | `handedness`                                      |
| `stability`       | `single_leg_stance`       | `eyes`, `footedness`                              |
| `stability`       | `y_balance_lower_quarter` | `footedness`, `y_balance_lower_quarter_direction` |
| `stability`       | `y_balance_upper_quarter` | `handedness`, `y_balance_upper_quarter_direction` |
| `tennis`          | `backhand`                | `handedness`                                      |
| `tennis`          | `forehand`                | `handedness`                                      |
| `tennis`          | `overhand_serve`          | `handedness`, `overhand_serve_type`               |
| `tennis`          | `underhand_serve`         | `handedness`                                      |
| `track_and_field` | `discus`                  | `handedness`                                      |
| `track_and_field` | `shot_put`                | `handedness`                                      |

Pairs with **no** published movement dimensions return only the fixed `Capture` fields.

#### Example `Capture` fields

For `baseball` + `hitting`:

```json theme={null}
{
  "session_id": "…",
  "activity": "baseball",
  "movement": "hitting",
  "handedness": "…",
  "bat_length": "…",
  "status": "completed"
}
```

For `jump` + `countermovement`:

```json theme={null}
{
  "session_id": "…",
  "activity": "jump",
  "movement": "countermovement",
  "arm_position": "…",
  "status": "completed"
}
```


## OpenAPI

````yaml GET /captures
openapi: 3.0.0
info:
  title: Uplift SQL API
  version: v1
  description: >-
    API for submitting SQL queries and retrieving job IDs for the Uplift
    platform.
servers:
  - url: https://api.uplift.ai/v1
security: []
paths:
  /captures:
    get:
      tags:
        - Captures
      summary: List Captures in Organization
      description: >-
        Returns a paginated list of captures for the organization with optional
        filters. Results are sorted newest first. All organization captures are
        included unless filtered; use `source=api` to restrict to captures with
        `source` equal to `api`. A capture linked to multiple athletes may
        appear more than once in `captures[]`; `total_count` is the distinct
        capture count.
      parameters:
        - name: athlete_id
          in: query
          required: false
          description: >-
            Restrict to captures for this athlete. Must exist in the
            organization; otherwise returns 400 with `athlete_id not found`.
          schema:
            type: string
            format: uuid
        - name: source
          in: query
          required: false
          description: When `api`, only captures with `source` equal to `api` are returned.
          schema:
            type: string
            enum:
              - api
        - name: status
          in: query
          required: false
          description: Filter by capture status.
          schema:
            type: string
            enum:
              - awaiting_upload
              - processing
              - completed
              - error
        - name: activity
          in: query
          required: false
          description: >-
            Case-insensitive filter on `activity` (trimmed and lowercased before
            matching). Response values preserve stored casing.
          schema:
            type: string
            maxLength: 128
        - name: movement
          in: query
          required: false
          description: >-
            Case-insensitive filter on `movement` (trimmed and lowercased before
            matching). Response values preserve stored casing.
          schema:
            type: string
            maxLength: 128
        - name: limit
          in: query
          required: false
          description: >-
            Page size. Integer from 1 to 500 inclusive; default 100 when
            omitted. Out-of-range values return 400.
          schema:
            type: integer
            minimum: 1
            maximum: 500
            default: 100
        - name: offset
          in: query
          required: false
          description: >-
            Rows to skip. Non-negative integer; default 0 when omitted. Negative
            values return 400.
          schema:
            type: integer
            minimum: 0
            default: 0
      responses:
        '200':
          description: >-
            Page of captures matching filters, sorted newest first. Each item in
            `captures` is a `Capture` object that may include additional
            top-level movement dimension fields based on its `activity` and
            `movement`. See [Movement dimensions](#movement-dimensions) for the
            field catalog. `total_count` is the distinct capture count; a
            capture linked to multiple athletes may appear more than once in
            `captures[]`.
          content:
            application/json:
              schema:
                type: object
                properties:
                  captures:
                    type: array
                    description: >-
                      Capture objects for this page. Each object includes the
                      fixed `Capture` fields plus any published movement
                      dimensions for that activity/movement pair.
                    items:
                      $ref: '#/components/schemas/Capture'
                  total_count:
                    type: integer
                    description: >-
                      Distinct capture count matching filters (not just this
                      page). May be less than `captures.length` when a capture
                      is linked to multiple athletes.
                  offset:
                    type: integer
                    description: >-
                      Offset used for this page (echoes the request value, or 0
                      when omitted).
                  limit:
                    type: integer
                    description: >-
                      Page size used for this page (echoes the request value, or
                      100 when omitted).
        '400':
          $ref: '#/components/responses/CaptureListBadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/InternalServerError'
      security:
        - bearerAuth: []
components:
  schemas:
    Capture:
      type: object
      description: ''
      properties:
        session_id:
          type: string
          description: Capture identifier.
        athlete_id:
          type: string
          nullable: true
          description: Athlete id when the capture is linked to an athlete.
        activity:
          type: string
          nullable: true
          description: Activity label. Casing matches the stored value.
        movement:
          type: string
          nullable: true
          description: Movement label. Casing matches the stored value.
        status:
          type: string
          enum:
            - awaiting_upload
            - processing
            - completed
            - error
          description: Capture processing status.
        error:
          type: string
          nullable: true
          description: Error summary when applicable.
        capture_time:
          type: string
          format: date-time
          nullable: true
          description: ISO 8601 capture time when available.
        fps_detected:
          type: number
          nullable: true
          description: Detected frame rate when available.
      additionalProperties: true
    Error:
      type: object
      properties:
        error:
          type: string
          description: A short error code representing the type of error.
        message:
          type: string
          description: A detailed message explaining the error.
        messages:
          type: string
          description: >-
            Create Capture only: validation detail. Multiple issues are joined
            with `; `.
  responses:
    CaptureListBadRequest:
      description: >-
        Invalid query parameters, or `athlete_id` does not exist in the
        organization.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          examples:
            invalidParameter:
              summary: Invalid query parameter
              value:
                error: BadRequest
                message: >-
                  The value of "limit" in the request parameters is invalid.
                  Please review the request and try again.
            athleteNotFound:
              summary: Unknown athlete_id
              value:
                error: BadRequest
                message: athlete_id not found
    Unauthorized:
      description: Unauthorized. Bearer token is missing or invalid.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: Unauthorized
            message: Bearer token is missing or invalid.
    Forbidden:
      description: Forbidden. You do not have permission to access this resource.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: Forbidden
            message: You do not have permission to access this resource.
    TooManyRequests:
      description: Too Many Requests. The rate limit has been exceeded.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: TooManyRequests
            message: The rate limit has been exceeded. Please wait and try again later.
    InternalServerError:
      description: Internal Server Error. Something went wrong on the server.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: InternalServerError
            message: >-
              An unexpected error occurred on the server. Please try again
              later.
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer

````