---
title: "List the deployment's workers, grouped by kind"
method: GET
path: "/v1/workers"
tags: ["Fleet"]
---

# List the deployment's workers, grouped by kind

`GET /v1/workers`

## Request

- Base URL: `https://api.spicrawl.com`
- URL: `https://api.spicrawl.com/v1/workers`
- Auth: HTTP bearer

Reports deployment shape: for each worker kind (`browser`, `egress`, `extract`, `batch`, always in that
order and always all four), how many workers are publishing, how many are ready, and each one's load.
Contains no tenant data. Any valid key may call it.

Use it to explain queuing or `ERR::ENGINE::UNAVAILABLE`: a kind with `present: 0` or `ready: 0` cannot
take work. `last_seen_ms` is an age; a large value means the worker stopped publishing.

## Response `200`

The fleet.

- FleetList
  - `kinds` FleetKind[], required: One entry per worker kind, in the fixed order browser, egress, extract, batch, including kinds with no workers.
    - `kind` 'browser' | 'egress' | 'extract' | 'batch', required: Worker type.
    - `present` integer, required: Workers of this kind currently publishing. 0 means none are running.
    - `ready` integer, required: Of those, how many accept work. 0 means work of this kind will queue or fail.
    - `workers` FleetWorker[], required: The workers. Empty array when none.
      - `worker_id` string, required: Worker instance id.
      - `kind` 'browser' | 'egress' | 'extract' | 'batch', required: Worker type.
      - `capacity` integer, required: Concurrent tasks the worker accepts.
      - `in_flight` integer, required: Tasks it is running now.
      - `free_slots` integer, required: Capacity minus in-flight, floored at 0.
      - `ready` boolean, required: Whether the worker accepts new work.
      - `detail` string: Worker's own readiness note, e.g. why it is not ready. Absent when empty.
      - `task_stream` string: Queue the worker consumes. Absent when none.
      - `address` string, required: Address the API dials. Empty string means the worker is listed but receives no registry traffic.
      - `last_seen_ms` integer, required: Milliseconds since the worker last published. Large values mean it may be gone. Can be slightly negative under clock skew.

## Other responses

- `401`: Missing, invalid, revoked or expired key. Not retryable with the same key.
- `403`: The key lacks the scope this route requires (`ERR::AUTH::INSUFFICIENT_SCOPE`), or the action is not permitted.
- `500`: Internal error. Retryable when `retryable` is true.
- `503`: No proxy exit or engine capacity was available. Retryable after `Retry-After`; 0 credits.

---

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