---
title: "List Jobs"
method: GET
path: "/api/jobs"
---

# List Jobs

`GET /api/jobs`

## Request

- Base URL: `https://api.tintin-x.com` (the document declares no server; this is the origin it was published from)
- URL: `https://api.tintin-x.com/api/jobs`
- Auth: HTTP bearer

List collapsed by series — same nail-set + same hands set folds
into one row even across multiple runs. Pagination is at the series
level. See `services.jobs.list_series_for_scope` for the query plan.

## Query parameters

- `offset` integer
- `limit` integer

## Response `200`

Successful Response

- JobListResponse
  - `items` JobSeriesResponse[], required
    - `series_id` string, uuid, required
    - `status` 'draft' | 'pending' | 'running' | 'succeeded' | 'failed', required
    - `nail_set_s3_key` string, required
    - `nail_set_url` string, nullable
    - `nail_set_label` string, nullable, required
    - `hands` HandResultResponse[], required
      - `id` string, uuid, required
      - `hand_idx` integer, required
      - `status` 'charging' | 'running' | 'succeeded' | 'failed' | 'refunded', required
      - `hand_s3_key` string, required
      - `hand_template_id` string, uuid, nullable
      - `hand_url` string, nullable
      - `bare_s3_key` string, nullable
      - `warp_s3_key` string, nullable
      - `final_s3_key` string, nullable
      - `final_url` string, nullable
      - `candidate_s3_keys` string[], nullable
      - `candidate_urls` string[], nullable
      - `candidate_video_urls` string[], nullable
      - `cents_charged` integer, nullable
      - `error_message` string, nullable
      - `created_at` string, date-time, required
      - `finished_at` string, date-time, nullable
    - `total_cents_charged` integer, required
    - `total_cents_refunded` integer, required
    - `run_count` integer, required
    - `last_run_at` string, date-time, required
    - `created_at` string, date-time, required
    - `hand_s3_keys` string[], required
    - `run_ids` string[], required
    - `kind` 'try_on' | 'thumbnail_gen' | 'lifestyle_gen' | 'nail_video_gen'
    - `thumbnail_meta` object, nullable
    - `lifestyle_meta` object, nullable
    - `nail_video_meta` NailVideoSeriesMeta: Subset of `nail_video_meta` JSONB surfaced for the History Regenerate flow. Mirrors the non-image fields of `NailVideoGenerateRequest`.
      - `template_id` string, nullable
      - `template_label` string, nullable
      - `aspect_ratio` 'auto' | '21:9' | '16:9' | '3:2' | '4:3' | '5:4' | '1:1' | '4:5' | '3:4' | '2:3' | '9:16' | '4:1' | '1:4' | '8:1' | '1:8', nullable
      - `duration_s` integer, nullable
      - `source_from_tryon` boolean, nullable
  - `has_more` boolean

## Other responses

- `422`: Validation Error

---

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