---
title: "List Jobs"
method: GET
path: "/api/jobs"
tags: ["Scraping"]
---

# List Jobs

`GET /api/jobs`

## Request

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

List recent scrape jobs.

When the Vercel proxy forwards ``X-Kolens-User-Id`` (the normal case
for the web app), restrict to jobs owned by that user — via either
direct job.user_id (set since the credits-attribution wiring landed)
or APIKey.user_id (covers legacy rows). Without the header (CLI /
cowork plugin) we keep the old per-api-key behavior.

EPIC #114 Phase 3: when ``X-Kolens-Workspace-Id`` is set and the
caller is a member, jobs are scoped to that workspace's pool
(every member's job is visible). Forging the header → 403.

## Query parameters

- `limit` integer

## Headers

- `x-kolens-user-id` string, nullable
- `x-kolens-workspace-id` string, nullable

## Response `200`

Successful Response

- JobListItem[]
  - `job_id` string, required
  - `keyword` string, required
  - `status` string, required
  - `kol_count` integer, required
  - `total_videos` integer, required
  - `progress` integer, required
  - `created_at` string, required
  - `completed_at` string, nullable, required
  - `credits_charged` number, nullable

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/kolens/apis/kolens-api.md) · [All operations](https://skmtc.dev/kolens/apis/kolens-api/llms.txt) · [OpenAPI document](https://skmtc.dev/kolens/apis/kolens-api/revisions/5d6865ab0a24?raw)
