---
title: "List an agent's versions"
method: GET
path: "/api/v1/{forge}/{project}/agents/{id}/versions"
tags: ["Project Agents"]
---

# List an agent's versions

`GET /api/v1/{forge}/{project}/agents/{id}/versions`

## Request

- Base URL: `https://entire.io` (the document declares no server; this is the origin it was published from)
- URL: `https://entire.io/api/v1/{forge}/{project}/agents/{id}/versions`
- Auth: none declared

The agent's immutable versions, newest first, each with who saved it. History stays readable after archive.

## Path parameters

- `forge` 'gh' | 'et', required
- `project` string, required
- `id` string, required

## Query parameters

- `per_page` integer
- `cursor` string

## Response `200`

A page of versions

- object
  - `items` object[], required
    - `version` integer, required
    - `created_at` string, required
    - `created_by` object, required
      - `kind` string, required
      - `id` string, required
    - `name` string, required
    - `description` string, required
    - `harness` string, required
    - `model` string, nullable, required
    - `reasoning_effort` string, nullable, required
    - `timeout_ms` integer, required
    - `instructions` string, required
    - `signal` object, required
      - `value_type` 'boolean' | 'percent' | 'size', required
      - `polarity` 'higher_is_better' | 'lower_is_better' | 'neutral', required
    - `preset` object, nullable, required: The Entire preset the agent runs as it is now; null for a custom agent. A preset agent's name, model, instructions and signal are the preset's.
      - `id` string, required
      - `version` integer, required
    - `is_enabled` boolean, required: Whether its trigger runs it. A paused agent still runs when asked to.
    - `environment_id` string, required
    - `repository_ids` string[], required
    - `triggers` object[], required
      - `id` string, required
      - `kind` 'push', required
      - `when` 'ready' | 'always' | 'not_ready', required: Which Changes the push trigger runs on: ready, only one ready for review (and when one becomes ready); always, every push; not_ready, only one not yet ready for review. In a repository without an approvals gate every open Change is ready. A write that omits it saves ready.
      - `branches` string[], required: Glob patterns over the Change's branch name (main, release/*, feature/**; never refs/…). Empty runs on every branch; a write that omits it saves [].
      - `paths` string[], required: Glob patterns over the repository-relative paths the whole Change changes (frontend/**, **/*.go). Empty runs on every Change; a write that omits it saves []. Manual runs ignore both filters.
    - `agent_id` string, required
  - `next_cursor` string

## Other responses

- `400`: Invalid request
- `401`: Not authenticated
- `403`: Feature disabled, or repository push is missing
- `404`: Project or resource not found
- `422`: Validation failed
- `502`: Agents service unavailable

## Changes

- **2026-10-29** `b92c28c5118f`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/entire/apis/entire-api/changes/api/v1/:forge/:project/agents/:id/versions/get.md)

---

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