---
title: "Get a project agent, archived or not"
method: GET
path: "/api/v1/{forge}/{project}/agents/{id}"
tags: ["Project Agents"]
---

# Get a project agent, archived or not

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

## 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}`
- Auth: none declared

## Path parameters

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

## Response `200`

The agent at its current version

- object
  - `id` string, required
  - `project_id` string, required
  - `version` integer, required
  - `etag` string, required: Write token: send it unchanged as If-Match to replace or archive.
  - `created_at` string, required
  - `created_by` object, required
    - `kind` string, required
    - `id` string, required
  - `updated_at` string, required
  - `archived_at` string, nullable, required
  - `archived_by` object
    - `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.
  - `stale_repository_ids` string[], required

## 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-25** `f4a534501f84`: 2 info
  - added the required property `triggers/items/branches` to the response with the `200` status
  - added the required property `triggers/items/paths` to the response with the `200` status
- **2026-10-25** `e8893f80c9f2`: 1 info
  - added the required property `triggers/items/when` to the response with the `200` status
- **2026-10-23** `365f01543923`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/entire/apis/entire-api/changes/api/v1/:forge/:project/agents/:id/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)
