---
title: "Get a project Trail by ID or project-local number"
method: GET
path: "/api/v1/{forge}/{project}/trails/{trailId}"
tags: ["Project Trails"]
---

# Get a project Trail by ID or project-local number

`GET /api/v1/{forge}/{project}/trails/{trailId}`

## Path parameters

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

## Response `200`

Trail

- object
  - `project` object
    - `id` string, required
    - `name` string, required
    - `provider` 'github' | 'entire', required
    - `reference` object, required
      - `forge` 'gh' | 'et', required
      - `project` string, required
    - `jurisdiction` string, required
    - `capabilities` object, required
      - `canManageTrails` boolean, required
  - `order` object
    - `groupRank` integer, required
    - `groupKey` string, required
    - `sortRank` integer, required
    - `sortValue` string, required
    - `updatedAt` string, required
    - `trailId` string, required
  - `continuationToken` string
  - `author` object
    - `accountId` string
    - `login` string, required
    - `displayName` string, required
    - `avatarUrl` string
    - `identity` object, nullable
      - `kind` string, required
      - `accountId` string, nullable, required
      - `displayName` string, nullable, required
      - `avatarUrl` string, nullable, required
      - `handles` object[], required
        - `provider` string, required
        - `handle` string, required
        - `isPrimary` boolean
  - `assigneeProfiles` object[]
    - `accountId` string
    - `login` string, required
    - `displayName` string, required
    - `avatarUrl` string
    - `identity` object, nullable
      - `kind` string, required
      - `accountId` string, nullable, required
      - `displayName` string, nullable, required
      - `avatarUrl` string, nullable, required
      - `handles` object[], required
        - `provider` string, required
        - `handle` string, required
        - `isPrimary` boolean
  - `id` string, required
  - `projectId` string, required
  - `number` integer, required
  - `title` string, required
  - `body` string, required
  - `status` 'draft' | 'open' | 'closed', required
  - `phase` 'planning' | 'building' | 'complete' | 'closed', required
  - `metadata` object, required
  - `type` 'bug' | 'feature' | 'task', required
  - `priority` 'urgent' | 'high' | 'medium' | 'low' | 'none', required
  - `assignees` string[], required
  - `assigneeAccountIds` string[], required
  - `repoIds` string[], required
  - `authorAccountId` string, required
  - `createdAt` string, required
  - `updatedAt` string, required
  - `closedAt` string, nullable, required
  - `changes` object[]
    - `id` string, required
    - `repositoryId` string, required
    - `repository` string, required
    - `branch` string, required
    - `number` integer, required
    - `title` string, required
    - `status` string, required
    - `hasCodeChanges` boolean, required
    - `createdAt` string, required
    - `updatedAt` string, required
  - `isPossiblyPartial` boolean

## Other responses

- `400` — Invalid request
- `401` — Not authenticated
- `403` — Feature disabled or access denied
- `404` — Project, Trail, or Change not found
- `409` — Resource conflict
- `412` — ETag precondition failed
- `422` — Validation failed
- `429` — Rate limit exceeded
- `502` — Project cell unavailable
- `503` — Project Trails unavailable

## Changes

- **2026-09-24** `ba1409f8f36b` — 2 info
  - added the optional property `assigneeProfiles/items/identity` to the response with the `200` status
  - added the optional property `author/identity` to the response with the `200` status
- **2026-09-21** `03a8a4babd7d` — 1 info
  - added the required property `phase` to the response with the `200` status
- **2026-09-18** `ae1a9a0cd542` — 1 warning
  - changed the pattern of the `path` request parameter `trailId` from `^[0-7][0-9A-HJKMNP-TV-Z]{25}$` to `^([0-7][0-9A-HJKMNP-TV-Z]{25}|[1-9][0-9]{0,9})$`
- **2026-09-17** `e1f0e2f14d0a` — 3 info
  - added the optional property `continuationToken` to the response with the `200` status
  - added the optional property `order` to the response with the `200` status
  - added the optional property `project` to the response with the `200` status
- **2026-09-16** `f15a377013f6` — 2 breaking, 2 info
  - removed the required property `assigneeProfiles/items/username` from the response with the `200` status
  - removed the required property `author/username` from the response with the `200` status
  - added the required property `assigneeProfiles/items/login` to the response with the `200` status
  - added the required property `author/login` to the response with the `200` status

[Full history](https://skmtc.dev/entire/apis/entire-api/changes/api/v1/:forge/:project/trails/:trailId/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/d69a682d6e44?raw)
