Skip to content

A project: what it is (kind, and kind_reason saying why), where it runs (runs and production_url), what you set and what detection decides (setting and detected), its repository and root_dir, and its homepage, docs and other links.

GET/workspaces/{workspace}/projects/{project}

A private repository’s project is found only by those who can see the repository.

404 for a project that does not exist or whose repository you cannot see. setting holds what a person set, each part null while it is left to detection. ecosystem is where a library’s files say it is published (composer, npm, cargo, go or python), or null. See What a project is.

  • Authentication: Optional. Public data can be read without a token; send one to see what is private.
  • MCP tool: workspace with action get_project, and the same inputs
  • Scope: An access token needs repo:read.
Name Type Required Description
workspace string Yes The workspace’s slug, e.g. “flagon-io”.
project string Yes The project’s slug, as in g1t.sh/{workspace}/{project}.
curl https://api.g1t.sh/workspaces/flagon-io/projects/g1t \
-H "Authorization: Bearer $G1T_TOKEN"

A successful request answers 200 with:

{
"id": "prj_01kkp3m8w2f6t9qh4c7d1r5n0x",
"workspace": "flagon-io",
"slug": "g1t",
"name": "g1t",
"description": "Git hosting where people and agents work together.",
"description_inherited": true,
"url": "https://g1t.sh/flagon-io/g1t",
"repository": "flagon-io/g1t",
"root_dir": "",
"default_branch": "main",
"private": false,
"archived": false,
"primary": true,
"kind": "app",
"kind_reason": {
"by": "set",
"detail": "Set to an app that runs elsewhere."
},
"runs": "elsewhere",
"production_url": "https://g1t.sh",
"setting": {
"kind": "app",
"runs": "elsewhere"
},
"detected": {
"kind": "app",
"reason": {
"by": "files",
"detail": "wrangler.jsonc at its root makes it an app."
}
},
"ecosystem": null,
"links": {
"homepage": "https://g1t.sh",
"homepage_inherited": true,
"docs": "https://docs.g1t.sh",
"custom": [
{
"label": "Status",
"url": "https://status.g1t.sh"
}
]
},
"created_at": "2026-09-01T10:00:00.000Z",
"updated_at": "2026-10-07T11:20:00.000Z",
"pushed_at": "2026-10-07T10:00:00.000Z"
}

A failed request answers with one of these statuses and a body like {"error": {"code": "not_found", "message": "Repository not found."}}. See errors.

Status Code When
401 unauthenticated A token is required, or the one sent is not valid.
403 forbidden The token is valid but not allowed to do this, such as a member-only change or an agent token outside its repository.
404 not_found It does not exist, or you cannot see it.
422 invalid The input is not valid. message says which field and why.