Project Dashboard
A named, shareable dashboard inside a project, made up of an ordered set of widget cards. The widgets array uses REPLACE semantics: the array you send becomes the complete set, so a PATCH that omits a widget DELETES it — omit the widgets key entirely to leave them untouched. Widget order is the order of the array.
List Project Dashboards
List projectDashboards. Returns a paginated envelope (data, total, limit, hasMore, nextCursor). Filterable by 6 fields. Ordered by createdAt unless you pass sort.
Required scope: project-dashboards:read
query Parameters
projectIdRestrict the list to one project. Omit to list projectDashboards across every project you can access.
sortField to sort by. Prefix with - for descending (-createdAt); a createdAt:desc / createdAt:asc suffix works too, but never both markers at once. Default: createdAt. Listing without projectId orders by -updatedAt instead.
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.
isShared[eq]Filter where isShared equals.
isDefault[eq]Filter where isDefault equals.
projectId[eq]Filter where projectId equals.
projectId[in]Filter where projectId is one of (comma-separated list).
createdById[eq]Filter where createdById equals.
createdById[in]Filter where createdById 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 Dashboards › 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 Dashboard
Create a Project Dashboard. Server-assigned fields are ignored if sent.
Required scope: project-dashboards: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 Dashboard › Request Body
nameDisplay name for the dashboard. Maximum 100 characters.
projectIdThe project this dashboard belongs to. Set once on create; a dashboard cannot move between projects.
isSharedWhen true the dashboard is visible to all project members; when false it is private to whoever created it. Setting isDefault: true forces isShared: true.
isDefaultThe project's default dashboard. Setting it to true also forces isShared: true and clears isDefault on the project's previous default — a project has at most one.
Ordered widget cards owned by this dashboard. REPLACE semantics — the array you send becomes the complete widget set: omit the key to leave the widgets untouched, send [] to remove all of them, and re-send every widget you want to keep (any you leave out are deleted). Each widget's position comes from its index in the array.
Create Project Dashboard › Responses
Created
idUnique identifier for this resource.
createdAtCreation timestamp.
nameDisplay name for the dashboard. Maximum 100 characters.
projectIdThe project this dashboard belongs to. Set once on create; a dashboard cannot move between projects.
isSharedWhen true the dashboard is visible to all project members; when false it is private to whoever created it. Setting isDefault: true forces isShared: true.
isDefaultThe project's default dashboard. Setting it to true also forces isShared: true and clears isDefault on the project's previous default — a project has at most one.
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.
Ordered widget cards owned by this dashboard. REPLACE semantics — the array you send becomes the complete widget set: omit the key to leave the widgets untouched, send [] to remove all of them, and re-send every widget you want to keep (any you leave out are deleted). Each widget's position comes from its index in the array.
The related Project, present only when you pass ?expand=project.
The related Actor, present only when you pass ?expand=createdByActor.
The related Actor, present only when you pass ?expand=updatedByActor.
Get Project Dashboard
Retrieve a single Project Dashboard by id.
Required scope: project-dashboards:read
path Parameters
id^[0-9A-Za-z_!]+$ · requiredId of the Project Dashboard.
query Parameters
expandComma-separated relations to inline (see Expanding objects above). Valid values are listed in the enum.
Get Project Dashboard › Responses
OK
idUnique identifier for this resource.
createdAtCreation timestamp.
nameDisplay name for the dashboard. Maximum 100 characters.
projectIdThe project this dashboard belongs to. Set once on create; a dashboard cannot move between projects.
isSharedWhen true the dashboard is visible to all project members; when false it is private to whoever created it. Setting isDefault: true forces isShared: true.
isDefaultThe project's default dashboard. Setting it to true also forces isShared: true and clears isDefault on the project's previous default — a project has at most one.
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.
Ordered widget cards owned by this dashboard. REPLACE semantics — the array you send becomes the complete widget set: omit the key to leave the widgets untouched, send [] to remove all of them, and re-send every widget you want to keep (any you leave out are deleted). Each widget's position comes from its index in the array.
The related Project, present only when you pass ?expand=project.
The related Actor, present only when you pass ?expand=createdByActor.
The related Actor, present only when you pass ?expand=updatedByActor.
Delete Project Dashboard
Permanently delete this Project Dashboard. This cannot be undone. The dashboard's widgets are deleted with it.
Required scope: project-dashboards:delete
path Parameters
id^[0-9A-Za-z_!]+$ · requiredId of the Project Dashboard.
Headers
Idempotency-KeyOptional replay key (see Idempotent requests above).
Delete Project Dashboard › Responses
No Content
Update Project Dashboard
Partially update a Project Dashboard. Only the fields you send are changed.
Required scope: project-dashboards:write
path Parameters
id^[0-9A-Za-z_!]+$ · requiredId of the Project Dashboard.
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 Dashboard › Request Body
nameDisplay name for the dashboard. Maximum 100 characters.
isSharedWhen true the dashboard is visible to all project members; when false it is private to whoever created it. Setting isDefault: true forces isShared: true.
isDefaultThe project's default dashboard. Setting it to true also forces isShared: true and clears isDefault on the project's previous default — a project has at most one.
Ordered widget cards owned by this dashboard. REPLACE semantics — the array you send becomes the complete widget set: omit the key to leave the widgets untouched, send [] to remove all of them, and re-send every widget you want to keep (any you leave out are deleted). Each widget's position comes from its index in the array.
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 Dashboard › Responses
OK
idUnique identifier for this resource.
createdAtCreation timestamp.
nameDisplay name for the dashboard. Maximum 100 characters.
projectIdThe project this dashboard belongs to. Set once on create; a dashboard cannot move between projects.
isSharedWhen true the dashboard is visible to all project members; when false it is private to whoever created it. Setting isDefault: true forces isShared: true.
isDefaultThe project's default dashboard. Setting it to true also forces isShared: true and clears isDefault on the project's previous default — a project has at most one.
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.
Ordered widget cards owned by this dashboard. REPLACE semantics — the array you send becomes the complete widget set: omit the key to leave the widgets untouched, send [] to remove all of them, and re-send every widget you want to keep (any you leave out are deleted). Each widget's position comes from its index in the array.
The related Project, present only when you pass ?expand=project.
The related Actor, present only when you pass ?expand=createdByActor.
The related Actor, present only when you pass ?expand=updatedByActor.