---
title: "Read one automation's board"
method: GET
path: "/code/automations/{automationId}/board"
---

# Read one automation's board

`GET /code/automations/{automationId}/board`

## Request

- Base URL: `https://api.caveman.so/api/v1`
- URL: `https://api.caveman.so/api/v1/code/automations/{automationId}/board`
- Auth: one of:
  - OAuth 2
    - Authorization code: `/api/v1/oauth/authorize`
    - Token URL: `/api/v1/oauth/token` scopes: `code:read`
  - HTTP bearer
  - API key in cookie `cave_access`
  - API key in cookie `__Secure-cave_identity.session_token`

GET /api/v1/code/automations/{automationId}/board on the Caveman Cloud control plane. Requires the code:read scope. Not exposed to autonomous agents: The automations board is read in the console's Automations page by the people who own the automations (ADR 0134). An agent works inside a run's session and does not read the org's automation outcomes from a control-plane connection.

## Query parameters

- `days` integer

## Response `200`

The automation's board

- object
  - `from` string, date-time, required
  - `to` string, date-time, required
  - `days` integer, required
  - `cost_label` 'measured', required
  - `totals` CodeBoardRow, required
    - `automation_id` string, uuid, nullable, required
    - `name` string
    - `repo` string
    - `enabled` boolean, required
    - `removed` boolean, required
    - `runs` integer, required
    - `succeeded` integer, required
    - `failed` integer, required
    - `cancelled` integer, required
    - `skipped` integer, required
    - `live` integer, required
    - `last_run_at` string, date-time, nullable, required
    - `cost_usd` number, required
    - `unpriced_attempts` integer, required: Attempts on a subscription login: tokens, no per-token price, left out of cost_usd.
    - `unrecorded_runs` integer, required: Runs that ended after starting a session with no run record: their cost is unknown, so cost_usd is a floor.
    - `cost_complete` boolean, required: False while any run's cost is unknown (unrecorded_runs > 0).
    - `pull_requests_opened` integer, required
    - `merged_pull_requests` integer, required
    - `open_pull_requests` integer, required
    - `closed_pull_requests` integer, required
    - `cost_per_merged_pull_request_usd` number, nullable, required: Null with no merge, and null while cost_complete is false.
    - `cost_per_merged_pull_request_floor_usd` number, nullable, required: While cost_complete is false: the known cost per merge, a lower bound.
    - `cycle_time_p50_seconds` number, nullable, required
    - `cycle_time_p90_seconds` number, nullable, required
    - `autonomous_merges` integer, required: Merged with no push to the branch by a person.
    - `autonomy_rate` number, nullable, required
  - `automations` CodeBoardRow[], required
    - `automation_id` string, uuid, nullable, required
    - `name` string
    - `repo` string
    - `enabled` boolean, required
    - `removed` boolean, required
    - `runs` integer, required
    - `succeeded` integer, required
    - `failed` integer, required
    - `cancelled` integer, required
    - `skipped` integer, required
    - `live` integer, required
    - `last_run_at` string, date-time, nullable, required
    - `cost_usd` number, required
    - `unpriced_attempts` integer, required: Attempts on a subscription login: tokens, no per-token price, left out of cost_usd.
    - `unrecorded_runs` integer, required: Runs that ended after starting a session with no run record: their cost is unknown, so cost_usd is a floor.
    - `cost_complete` boolean, required: False while any run's cost is unknown (unrecorded_runs > 0).
    - `pull_requests_opened` integer, required
    - `merged_pull_requests` integer, required
    - `open_pull_requests` integer, required
    - `closed_pull_requests` integer, required
    - `cost_per_merged_pull_request_usd` number, nullable, required: Null with no merge, and null while cost_complete is false.
    - `cost_per_merged_pull_request_floor_usd` number, nullable, required: While cost_complete is false: the known cost per merge, a lower bound.
    - `cycle_time_p50_seconds` number, nullable, required
    - `cycle_time_p90_seconds` number, nullable, required
    - `autonomous_merges` integer, required: Merged with no push to the branch by a person.
    - `autonomy_rate` number, nullable, required
  - `series` object[], required
    - `day` string, date, required
    - `runs` integer, required
    - `succeeded` integer, required
    - `failed` integer, required
    - `cost_usd` number, required
    - `merged_pull_requests` integer, required
    - `unrecorded_runs` integer, required
  - `failure_reasons` object[], required
    - `status` 'failed' | 'cancelled', required
    - `reason` string, required
    - `step` string, required
    - `runs` integer, required
  - `steps` CodeStepModel[], nullable, required
    - `step` string, required
    - `engine` string, required
    - `model_class` string, required
    - `model` string, required
    - `attempts` integer, required
    - `succeeded` integer, required
    - `failed` integer, required
    - `checks_failed` integer, required
    - `input_tokens` integer, required
    - `output_tokens` integer, required
    - `cost_usd` number, required
    - `duration_p50_ms` integer, required

## Other responses

- `404`: Not an automation of this organization.
- `2XX`: Successful response. Exact status depends on synchronous or durable delivery outcome.
- `4XX`: Structured failure. `error.code` is stable; `error.request_id` is echoed in the x-cave-request-id header.
- `5XX`: Structured failure. `error.code` is stable; `error.request_id` is echoed in the x-cave-request-id header.

---

[API](https://skmtc.dev/caveman/apis/caveman-cloud-api.md) - [All operations](https://skmtc.dev/caveman/apis/caveman-cloud-api/llms.txt) - [OpenAPI document](https://skmtc.dev/caveman/apis/caveman-cloud-api/revisions/508312d01cfc?raw)
