Projects


DELETE /{o}/{p}/nuke

Wipe this project's data

Project-scoped self-service wipe, callable with a project API token at admin/owner. Destroys every row in every table the project's data reaches, leaving the project itself, its members, its repo links, its tokens, and its audit trail. Counts are keyed by SQL table name. Idempotent.

Auth: Bearer token required · Permission: apply:write

Path parameters

NameTypeDescription
ostring
pstring

Responses

StatusDescriptionSchema
200OKProjectNukeResult
401UnauthorizedError
403ForbiddenError

GET /orgs/{orgId}/projects

List projects in an org

Org membership required.

Auth: Bearer token required

Path parameters

NameTypeDescription
orgIdstring

Responses

StatusDescriptionSchema
200OKProjectList
401UnauthorizedError
403ForbiddenError

POST /orgs/{orgId}/projects

Create a project

Org owner/admin only. Auto-creates the caller's owner membership and the default graph views.

Auth: Bearer token required

Path parameters

NameTypeDescription
orgIdstring

Request body (application/json)

FieldTypeDescription
namestringProject name (required)
slugstringURL slug (lowercase, hyphens only) (required)

Responses

StatusDescriptionSchema
201CreatedProject
401UnauthorizedError
403ForbiddenError
409ConflictError

GET /orgs/{orgId}/projects/{projectId}

Get a project

Org membership required.

Auth: Bearer token required

Path parameters

NameTypeDescription
orgIdstring
projectIdstring

Responses

StatusDescriptionSchema
200OKProject
401UnauthorizedError
403ForbiddenError
404Not FoundError

PUT /orgs/{orgId}/projects/{projectId}

Update a project

Org owner/admin only.

Auth: Bearer token required

Path parameters

NameTypeDescription
orgIdstring
projectIdstring

Request body (application/json)

FieldTypeDescription
namestringNew project name
metadataobjectPer-project UI settings

Responses

StatusDescriptionSchema
200OKProject
401UnauthorizedError
403ForbiddenError
404Not FoundError

DELETE /orgs/{orgId}/projects/{projectId}

Delete a project

Org owner only. Org admin no longer has project:delete.

Auth: Bearer token required

Path parameters

NameTypeDescription
orgIdstring
projectIdstring

Responses

StatusDescriptionSchema
200OKobject
401UnauthorizedError
403ForbiddenError
404Not FoundError

GET /orgs/{orgId}/projects/{projectId}/members

List project members

Org membership required.

Auth: Bearer token required

Path parameters

NameTypeDescription
orgIdstring
projectIdstring

Responses

StatusDescriptionSchema
200OKProjectMemberList
401UnauthorizedError
403ForbiddenError
404Not FoundError

POST /orgs/{orgId}/projects/{projectId}/members

Add a project member

Org membership required. Org owner/admin, unrestricted. A project member with members:manage (project admin/owner) may also add members, capped at their own project role — they cannot grant a role senior to their own. The target must already be a member of the org that owns the project. This route is an upsert, so it is also how a role is changed; re-roling the project's last owner below owner is refused with 409.

Auth: Bearer token required

Path parameters

NameTypeDescription
orgIdstring
projectIdstring

Request body (application/json)

FieldTypeDescription
userIdstringUser ID (required)
roleowner | admin | write | readRole (owner|admin|write|read)

Responses

StatusDescriptionSchema
201Createdobject
400Bad RequestError
401UnauthorizedError
403ForbiddenError
404Not FoundError
409ConflictError

DELETE /orgs/{orgId}/projects/{projectId}/members/{userId}

Remove a project member

Org membership required. Org owner/admin, unrestricted. A project member with members:manage (project admin/owner) may also remove members, capped at their own project role — they cannot remove a member senior to their own. Removing the project's last owner is refused with 409, whoever asks.

Auth: Bearer token required

Path parameters

NameTypeDescription
userIdstringUser ID
orgIdstring
projectIdstring

Responses

StatusDescriptionSchema
200OKobject
401UnauthorizedError
403ForbiddenError
404Not FoundError
409ConflictError

PUT /orgs/{orgId}/projects/{projectId}/members/{userId}/cell-scopes

Set a member's cell scopes

Org owner/admin only. null resets to all-cells; an array restricts the member to those cell values.

Auth: Bearer token required

Path parameters

NameTypeDescription
userIdstringUser ID
orgIdstring
projectIdstring

Request body (application/json)

FieldTypeDescription
cellScopesstring[] | nullnull = all cells; array = restrict to listed cell-label values (required)

Responses

StatusDescriptionSchema
200OKobject
401UnauthorizedError
403ForbiddenError
404Not FoundError

Schemas

Error

FieldTypeDescription
errorstring(required)
codestring

Project

FieldTypeDescription
idstring(required)
orgIdstring(required)
namestring(required)
slugstring(required)
isDemoboolean(required)
metadataobject(required)
lastDriftRunAtstring | string | null(required)
createdAtstring | string(required)
updatedAtstring | string(required)

ProjectList

Type: Project[]

ProjectMemberList

Type: object[]

ProjectNukeResult

FieldTypeDescription
projectIdstring(required)
rowCountsDeletedobject(required)