---
title: "List your async jobs"
method: GET
path: "/api/v1/jobs"
---

# List your async jobs

`GET /api/v1/jobs`

Returns async jobs as a paginated list, sorted and filtered by the query
parameters. Heavy fields (payload, artifact manifest) are omitted — fetch
full per-job state via `GET /api/v1/forecasts/{id}`.

Jobs tombstoned by the retention policy are excluded here and return 404
on the detail endpoint.

## Query parameters

- `page` integer
- `limit` integer
- `sort` 'id' | 'created_at' | 'settled_at' | 'eur_cents_final'
- `order` 'asc' | 'desc'
- `status` 'queued' | 'running' | 'completed' | 'failed' | 'canceled'
- `pipeline_type` string

## Response `200`

Paginated job list.

- object
  - `jobs` JobSummary[], required
    - `created_at` string, date-time, required
    - `eur_cents_final` integer, nullable — Final settled charge for the job in EUR cents. Null until the job reaches a terminal state.
    - `job_id` string, uuid, required
    - `pipeline_type` string, required — Pipeline that produced this job — currently always `forecast`.
    - `run_id` string — Opaque internal run identifier. Omitted for jobs that have not started yet; include in support requests.
    - `settled` boolean, required — True once the job has reached a terminal state and the charge has been posted.
    - `settled_at` string, date-time, nullable
    - `status` 'queued' | 'running' | 'completed' | 'failed' | 'canceled', required
    - `terminal_reason` string, nullable — Human-readable failure message for `failed` or `canceled` jobs; null for non-terminal statuses or cleanly-canceled jobs.
    - `workflow_id` string — Opaque internal workflow identifier. Omitted for jobs that have not started yet; include in support requests.
  - `pagination` JobsPagination, required
    - `limit` integer, required — Page size echoed back from the request.
    - `order` 'asc' | 'desc', required — Sort direction echoed back from the request.
    - `page` integer, required — 1-indexed current page number echoed back from the request.
    - `sort` 'id' | 'created_at' | 'settled_at' | 'eur_cents_final', required — Column the rows are sorted by, echoed back from the request.
    - `total` integer, required — Total matching rows for the authenticated user (full set, not just this page).
    - `total_pages` integer, required — ceil(total / limit). Zero when total is zero.

## Other responses

- `400` — Invalid query parameter — bad `page`, `limit`, `sort`, or `order` value.
- `401` — Missing or invalid bearer token.
- `429` — Rate limit exceeded.

---

[API](https://skmtc.net/sybilion/apis/sybilion-api.md) · [All operations](https://skmtc.net/sybilion/apis/sybilion-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/sybilion/sybilion-api/versions/2ba1f4c6f25d/schema)
