---
title: "Api Screener Status"
method: GET
path: "/api/screener/status"
---

# Api Screener Status

`GET /api/screener/status`

## Request

- Base URL: `https://www.oxfordledge.com` (the document declares no server; this is the origin it was published from)
- URL: `https://www.oxfordledge.com/api/screener/status`
- Auth: none declared

Poll screener job status.

2026-05-28 (H-13 SECURITY_AUDIT P3): require_auth + per-user
scoping. Without these, the in-memory _screener_jobs dict is a
cross-user IDOR (any caller with the job UUID reads any user's
paid-tier screener results). Returns 404 not 403 on cross-user
access so we don't leak that the job exists. Audit §H-13
lines 201-207.

## Query parameters

- `job_id` string: Job ID returned by /api/screener/run

## Response `200`

Successful Response

- ScreenerStatusResponse: `/api/screener/status` — poll progress for an async screener job. F4 boundary backfill 2026-05-08 (Initiative 6). FE screener-options polls every ~5s while a job is running; reads `status === 'complete'` to stop polling, `progress` for the bar, `results` to render rows. Job-not-found returns 404 with a different shape (handled separately by the FE error path).
  - `status` string, required: One of 'pending', 'running', 'complete', 'error'. FE stops polling on 'complete'.
  - `progress` integer, required: 0-100 progress percentage. FE renders bar width directly.
  - `results` unknown[], required: Result rows (only populated once status='complete'). FE iterates to render the table.
    - unknown
  - `error` string, nullable: Error message if status='error'. None otherwise.

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/oxfordledge/apis/oxford-ledge-api.md) · [All operations](https://skmtc.dev/oxfordledge/apis/oxford-ledge-api/llms.txt) · [OpenAPI document](https://skmtc.dev/oxfordledge/apis/oxford-ledge-api/revisions/e832a1260f0b?raw)
