---
title: "Get a Project by handle or id"
method: GET
path: "/o/{org}/p/{project}"
tags: ["Projects"]
---

# Get a Project by handle or id

`GET /o/{org}/p/{project}`

## Request

- Base URL: `https://api.prix.dev`
- URL: `https://api.prix.dev/o/{org}/p/{project}`
- Auth: HTTP bearer

A private Project is its creator's alone; anyone else gets the same `404` as for a missing one.

## Response `200`

The Project.

- object
  - `project` Project, required: The repository is optional Context; installation_id, repo_owner and repo_name are all set or all null.
    - `id` string, uuid, required
    - `org_id` string, uuid: The org the Project belongs to.
    - `user_id` string, uuid: The Project's creator: the one person who sees it while it is private, and the only one who changes its visibility.
    - `visibility` 'private' | 'org': Who sees the Project, its runs, automations, secrets and files: `private` is its creator alone, `org` is every member of its org. A run is always readable by whoever started it; a run with no Project is readable by them alone.
    - `name` string, required
    - `installation_id` integer, nullable, required
    - `repo_owner` string, nullable, required
    - `repo_name` string, nullable, required
    - `repo_id` integer, nullable
    - `default_branch` string, nullable
    - `default_harness` 'claude' | 'codex' | 'opencode', required: Launch-boundary managed harnesses.
    - `default_harness_version` string, nullable
    - `readiness` 'pending' | 'ready' | 'error', required
    - `sync_status` 'idle' | 'syncing' | 'synced' | 'error'
    - `sync_error` string, nullable
    - `last_synced_at` string, date-time, nullable
    - `created_at` string, date-time
    - `updated_at` string, date-time
    - `is_default` boolean: The project a prompt-only surface (Slack) resolves to. Per user, not per org.
    - `people_count` integer: How many people it is shared with by name (GET …/people lists them).
    - `goal` string: What the Project is for; empty when unset.
    - `instructions` string: Standing instructions every run in the Project receives ahead of its prompt; empty when unset.
    - `paused_at` string, date-time, nullable: When it was paused: no run or follow-up starts (`409 PROJECT_PAUSED`) and no automation fires. Null when running.
    - `archived_at` string, date-time, nullable: When it was archived. A client leaves it out of its lists; nothing else changes, its runs and automations carry on. Null when not archived.
    - `last_run_at` string, date-time, nullable: When a run last started in the Project. Null before its first run.

## Other responses

- `401`: No bearer, an unknown, revoked or expired one, or an API key on a route keys cannot call.
- `404`: No such resource for the caller, including one in an org the caller is not in or a Project that is private to someone else.

---

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