Project Folder
A project folder — a grouping of projects inside a portfolio. To file a project into a folder, set that project's projectFolderId; set it to null to unfile. A folder belongs to exactly one portfolio and cannot be moved between portfolios.
List Project Folders
List projectFolders. Returns a paginated envelope (data, total, limit, hasMore, nextCursor). Filterable by 3 fields. Ordered by order unless you pass sort.
Required scope: project-folders:read
query Parameters
sortField to sort by. Prefix with - for descending (-createdAt); a createdAt:desc / createdAt:asc suffix works too, but never both markers at once. Default: order.
cursorOpaque cursor for the next page (the envelope nextCursor).
limitItems per page (1–200, default 50). A larger value is clamped to the cap rather than rejected, so always follow nextCursor instead of assuming one page held everything.
includeTotalWhen true, the response envelope includes the total number of matching rows. Omit it for cheaper pagination.
expandComma-separated relations to inline (see Expanding objects above). Valid values are listed in the enum.
name[eq]Filter where name equals.
name[contains]Filter where name contains.
name[startsWith]Filter where name starts with.
portfolioId[eq]Filter where portfolioId equals.
portfolioId[in]Filter where portfolioId is one of (comma-separated list).
createdAt[gt]Filter where createdAt is greater than.
createdAt[gte]Filter where createdAt is greater than or equal to.
createdAt[lt]Filter where createdAt is less than.
createdAt[lte]Filter where createdAt is less than or equal to.
List Project Folders › Responses
OK
The page of results.
totalTotal rows matching the query (across pages).
limithasMorenextCursorOpaque cursor for the next page; null on the last page.
Create Project Folder
Create a Project Folder. Server-assigned fields are ignored if sent.
Required scope: project-folders:write
query Parameters
expandComma-separated relations to inline (see Expanding objects above). Valid values are listed in the enum.
Headers
Idempotency-KeyOptional replay key (see Idempotent requests above).
Create Project Folder › Request Body
nameFolder display name. Maximum 30 characters.
portfolioIdThe portfolio that contains this project folder. Required on create and immutable after — a folder cannot be moved between portfolios.
orderSort order of this project folder within its portfolio. Server-assigned on create; send a new value to reorder.
Create Project Folder › Responses
Created
idUnique identifier for this resource.
createdAtCreation timestamp.
nameFolder display name. Maximum 30 characters.
portfolioIdThe portfolio that contains this project folder. Required on create and immutable after — a folder cannot be moved between portfolios.
updatedAtLast update timestamp.
createdByActorIdWho created this record — a person, an agent, an automation or the system itself. Read-only, stamped by the server on writes made through this API, and null on records created any other way, so treat it as present-or-null rather than always populated. This is an actor id (a UUID), not a member id: look it up with GET /actors/{id}, whose memberId gives you the person to use against /members.
updatedByActorIdWho last wrote to this record — a person, an agent, an automation or the system itself. Read-only, stamped by the server on writes made through this API, and null on records last written any other way, so treat it as present-or-null rather than always populated. This is an actor id (a UUID), not a member id: look it up with GET /actors/{id}, whose memberId gives you the person to use against /members.
createdByActorTypeThe creator actor's type (human, agent, cron, recurringTask, automation, outboxRetry, systemDefault). Server-derived from actors.type; read-only, not directly writable.
updatedByActorTypeThe last writer actor's type (human, agent, cron, recurringTask, automation, outboxRetry, systemDefault). Server-derived from actors.type via the row's updatedByActorId; read-only, not directly writable.
orderSort order of this project folder within its portfolio. Server-assigned on create; send a new value to reorder.
The related Portfolio, present only when you pass ?expand=portfolio.
The linked Project rows, present only when you pass ?expand=projects.
The related Actor, present only when you pass ?expand=createdByActor.
The related Actor, present only when you pass ?expand=updatedByActor.
Get Project Folder
Retrieve a single Project Folder by id.
Required scope: project-folders:read
path Parameters
id^[0-9A-Za-z_!]+$ · requiredId of the Project Folder.
query Parameters
expandComma-separated relations to inline (see Expanding objects above). Valid values are listed in the enum.
Get Project Folder › Responses
OK
idUnique identifier for this resource.
createdAtCreation timestamp.
nameFolder display name. Maximum 30 characters.
portfolioIdThe portfolio that contains this project folder. Required on create and immutable after — a folder cannot be moved between portfolios.
updatedAtLast update timestamp.
createdByActorIdWho created this record — a person, an agent, an automation or the system itself. Read-only, stamped by the server on writes made through this API, and null on records created any other way, so treat it as present-or-null rather than always populated. This is an actor id (a UUID), not a member id: look it up with GET /actors/{id}, whose memberId gives you the person to use against /members.
updatedByActorIdWho last wrote to this record — a person, an agent, an automation or the system itself. Read-only, stamped by the server on writes made through this API, and null on records last written any other way, so treat it as present-or-null rather than always populated. This is an actor id (a UUID), not a member id: look it up with GET /actors/{id}, whose memberId gives you the person to use against /members.
createdByActorTypeThe creator actor's type (human, agent, cron, recurringTask, automation, outboxRetry, systemDefault). Server-derived from actors.type; read-only, not directly writable.
updatedByActorTypeThe last writer actor's type (human, agent, cron, recurringTask, automation, outboxRetry, systemDefault). Server-derived from actors.type via the row's updatedByActorId; read-only, not directly writable.
orderSort order of this project folder within its portfolio. Server-assigned on create; send a new value to reorder.
The related Portfolio, present only when you pass ?expand=portfolio.
The linked Project rows, present only when you pass ?expand=projects.
The related Actor, present only when you pass ?expand=createdByActor.
The related Actor, present only when you pass ?expand=updatedByActor.
Delete Project Folder
Permanently delete this Project Folder. This cannot be undone. The projects filed in the folder are NOT deleted — they become unfiled (projectFolderId: null).
Required scope: project-folders:delete
path Parameters
id^[0-9A-Za-z_!]+$ · requiredId of the Project Folder.
Headers
Idempotency-KeyOptional replay key (see Idempotent requests above).
Delete Project Folder › Responses
No Content
Update Project Folder
Partially update a Project Folder. Only the fields you send are changed.
Required scope: project-folders:write
path Parameters
id^[0-9A-Za-z_!]+$ · requiredId of the Project Folder.
query Parameters
expandComma-separated relations to inline (see Expanding objects above). Valid values are listed in the enum.
Headers
Idempotency-KeyOptional replay key (see Idempotent requests above).
Update Project Folder › Request Body
nameFolder display name. Maximum 30 characters.
orderSort order of this project folder within its portfolio. Server-assigned on create; send a new value to reorder.
expectedUpdatedAtOptional concurrency guard: the updatedAt you last read. If the resource has changed since, the update is rejected with 409 instead of overwriting the other writer. Re-read, re-derive your change from the current values, and retry with the fresh updatedAt.
Update Project Folder › Responses
OK
idUnique identifier for this resource.
createdAtCreation timestamp.
nameFolder display name. Maximum 30 characters.
portfolioIdThe portfolio that contains this project folder. Required on create and immutable after — a folder cannot be moved between portfolios.
updatedAtLast update timestamp.
createdByActorIdWho created this record — a person, an agent, an automation or the system itself. Read-only, stamped by the server on writes made through this API, and null on records created any other way, so treat it as present-or-null rather than always populated. This is an actor id (a UUID), not a member id: look it up with GET /actors/{id}, whose memberId gives you the person to use against /members.
updatedByActorIdWho last wrote to this record — a person, an agent, an automation or the system itself. Read-only, stamped by the server on writes made through this API, and null on records last written any other way, so treat it as present-or-null rather than always populated. This is an actor id (a UUID), not a member id: look it up with GET /actors/{id}, whose memberId gives you the person to use against /members.
createdByActorTypeThe creator actor's type (human, agent, cron, recurringTask, automation, outboxRetry, systemDefault). Server-derived from actors.type; read-only, not directly writable.
updatedByActorTypeThe last writer actor's type (human, agent, cron, recurringTask, automation, outboxRetry, systemDefault). Server-derived from actors.type via the row's updatedByActorId; read-only, not directly writable.
orderSort order of this project folder within its portfolio. Server-assigned on create; send a new value to reorder.
The related Portfolio, present only when you pass ?expand=portfolio.
The linked Project rows, present only when you pass ?expand=projects.
The related Actor, present only when you pass ?expand=createdByActor.
The related Actor, present only when you pass ?expand=updatedByActor.