Project
A top-level container in the Nifty workspace. Projects hold tasks, lists, statuses, files, documents, members, and a project discussion chat. Scoped to a team; optionally grouped under a portfolio.
List Projects
List projects. Returns a paginated envelope (data, total, limit, hasMore, nextCursor). Filterable by 6 fields. Ordered by order unless you pass sort.
Required scope: projects: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.
purgeAt[null]Filter where purgeAt is null (pass true).
purgeAt[notNull]Filter where purgeAt is not null (pass true).
purgeAt[gt]Filter where purgeAt is greater than.
purgeAt[gte]Filter where purgeAt is greater than or equal to.
purgeAt[lt]Filter where purgeAt is less than.
purgeAt[lte]Filter where purgeAt is less than or equal to.
name[eq]Filter where name equals.
name[contains]Filter where name contains.
name[startsWith]Filter where name starts with.
archived[eq]Filter where archived equals.
accessType[eq]Filter where accessType equals.
accessType[in]Filter where accessType is one of (comma-separated list).
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 Projects › 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
Create a Project. Server-assigned fields are ignored if sent.
Required scope: projects: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 › Request Body
nameDisplay name. Must be unique among the projects in the same portfolio. Maximum 100 characters.
descriptionOptional project description. Supports Markdown formatting.
iconIcon image URL for the project. Objects use icon; people use avatar.
initialsUp to 3 characters shown when the project has no icon. Derived from name when omitted.
color^#[0-9A-Fa-f]{6}$Primary brand colour as a 6-digit hex value, e.g. #00A99B. Assigned from the Nifty palette when omitted.
secondaryColor^#[0-9A-Fa-f]{6}$Secondary brand colour as a 6-digit hex value. Derived from color when omitted.
portfolioIdThe portfolio this project is grouped under. Defaults to the team's General portfolio when omitted on create. Immutable after create.
accessTypeVisibility: limited (default — only invited members) or public (all team members auto-added). Omit for limited; pass public explicitly to make the project team-wide.
modulesFeature tabs the project exposes. Omitting the field enables all eight. Options: tasks (the task board), milestones (dated roadmap of lists), calendar (calendar of dated items), documents (collaborative docs), files (file storage), discussion (threaded project discussions), forms (intake/survey forms), home (project overview). e.g. a content calendar → [tasks, calendar, files]; a bug tracker → [tasks]; a knowledge base → [documents, files]; a client project → [tasks, milestones, files, discussion].
defaultTasksViewDefault task board view: table | calendar | swimlane | kanban | timeline | report.
hiddenListColumnsColumns hidden on the list view. Each entry is either a built-in column key (name, assignee, dueDate, status, list, labels, estimate) or the id of a custom field attached to the project.
listColumnsOrderList-view columns in display order, using the same vocabulary as hiddenListColumns — built-in column keys and/or attached custom-field ids.
customFieldsOrderProject-level custom-field ids in display order.
taskCustomFieldsOrderTask-level custom-field ids in display order.
listCustomFieldsOrderList-level custom-field ids in display order.
autoMilestonesWhen true, monthly lists are created automatically for this project. Applied at create time.
hideUsersFromGuestsHide member list from guest role
subtaskStatusEnabledEnable per-subtask status tracking
queryAllFilesQuery files across all tasks
membersTeam member ids on this project. REPLACE semantics — the array you send in the create or update body becomes the complete roster: ids you omit are removed, ids you add are invited. Omit the key to leave the roster untouched. Read the materialized rows with ?expand=members.
projectFolderIdThe project folder this project is filed under, within its portfolio. null = unfiled.
Custom-field values on this project. READ: ?expand=customFields returns the values attached to this project. WRITE: include customFields: [{ customFieldId, value }] in the create/update body to set values — each one is checked against its field definition before the write commits (value is always a string; max 50 entries per request; "" clears). Field definitions live on the read-only customField resource.
Create Project › Responses
Created
idUnique identifier for this resource.
createdAtCreation timestamp.
nameDisplay name. Must be unique among the projects in the same portfolio. Maximum 100 characters.
initialsUp to 3 characters shown when the project has no icon. Derived from name when omitted.
colorPrimary brand colour as a 6-digit hex value, e.g. #00A99B. Assigned from the Nifty palette when omitted.
secondaryColorSecondary brand colour as a 6-digit hex value. Derived from color when omitted.
accessTypeVisibility: limited (default — members only) or public (team-wide; all team members are added automatically). A project has exactly these two levels.
modulesFeature tabs the project exposes. SELECT only the ones this project needs — OMITTING the field enables ALL 8, which clutters a focused project. Options: tasks (the task board), milestones (dated roadmap of lists), calendar (calendar of dated items), documents (collaborative docs), files (file storage), discussion (threaded project discussions), forms (intake/survey forms), home (project overview). e.g. a content calendar → [tasks, calendar, files]; a bug tracker → [tasks]; a knowledge base → [documents, files]. Set once at create; immutable afterwards.
autoMilestonesWhen true, monthly lists are created automatically for this project. Applied at create time.
hideUsersFromGuestsHide member list from guest role
subtaskStatusEnabledEnable per-subtask status tracking
queryAllFilesQuery files across all tasks
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.
purgeAtWhen this resource will be permanently deleted — soft-delete time + 30-day retention; null while live.
deletedByIdMember who soft-deleted this resource (server-stamped). A member id — resolve it with GET /members/{id}.
archivedArchived projects are hidden from default project lists. Archiving does NOT cascade — tasks and lists inside the project stay active. Set it with PATCH; a project cannot be created already archived.
niceIdShort project key used in task references — a project with the key PRJ has tasks that read PRJ-14. Server-generated.
descriptionOptional project description. Supports Markdown formatting.
iconIcon image URL for the project. Objects use icon; people use avatar.
portfolioIdThe portfolio this project is grouped under. Defaults to the team's General portfolio when omitted on create. Immutable after create.
defaultTasksViewDefault task board view: table, calendar, swimlane, kanban, timeline or report.
hiddenListColumnsColumns hidden on the list view. Each entry is either a built-in column key (name, assignee, dueDate, status, list, labels, estimate) or the id of a custom field attached to the project.
listColumnsOrderList-view columns in display order, using the same vocabulary as hiddenListColumns — built-in column keys and/or attached custom-field ids.
customFieldsOrderProject-level custom-field ids in display order.
taskCustomFieldsOrderTask-level custom-field ids in display order.
listCustomFieldsOrderList-level custom-field ids in display order.
projectFolderIdThe project folder this project is filed under, within its portfolio. null = unfiled.
ownerIdThe team member who owns this project. Change it with the project transfer operation — it is not settable on create or update. Null only while a project has no owner (a workspace-imported project, or one whose owner has been removed from the team).
discussionChatIdId of the project's discussion chat, or null if it has none. Fetch its messages with GET /messages?chatId=<this>. Reading those messages requires chat membership — access to the project alone is not enough. Discussion-chat messages only: this is NOT a union of the project's task, document and file comments.
defaultStatusIdThe project's first status column, where a new task lands by default. Pass it as statusId when creating a task — a task with no status is invisible on the board. null until the project has a status. Not returned on create/update responses; read it with GET /projects/{id}.
The related Actor, present only when you pass ?expand=createdByActor.
The related Actor, present only when you pass ?expand=updatedByActor.
The related Team Member, present only when you pass ?expand=deletedBy.
The linked Team Member rows, present only when you pass ?expand=members.
The related Portfolio, present only when you pass ?expand=portfolio.
The linked Chat rows, present only when you pass ?expand=discussionChat.
The linked attachedCustomField rows, present only when you pass ?expand=customFields.
Get Project
Retrieve a single Project by id.
Required scope: projects:read
path Parameters
id^[0-9A-Za-z_!]+$ · requiredId of the Project.
query Parameters
expandComma-separated relations to inline (see Expanding objects above). Valid values are listed in the enum.
Get Project › Responses
OK
idUnique identifier for this resource.
createdAtCreation timestamp.
nameDisplay name. Must be unique among the projects in the same portfolio. Maximum 100 characters.
initialsUp to 3 characters shown when the project has no icon. Derived from name when omitted.
colorPrimary brand colour as a 6-digit hex value, e.g. #00A99B. Assigned from the Nifty palette when omitted.
secondaryColorSecondary brand colour as a 6-digit hex value. Derived from color when omitted.
accessTypeVisibility: limited (default — members only) or public (team-wide; all team members are added automatically). A project has exactly these two levels.
modulesFeature tabs the project exposes. SELECT only the ones this project needs — OMITTING the field enables ALL 8, which clutters a focused project. Options: tasks (the task board), milestones (dated roadmap of lists), calendar (calendar of dated items), documents (collaborative docs), files (file storage), discussion (threaded project discussions), forms (intake/survey forms), home (project overview). e.g. a content calendar → [tasks, calendar, files]; a bug tracker → [tasks]; a knowledge base → [documents, files]. Set once at create; immutable afterwards.
autoMilestonesWhen true, monthly lists are created automatically for this project. Applied at create time.
hideUsersFromGuestsHide member list from guest role
subtaskStatusEnabledEnable per-subtask status tracking
queryAllFilesQuery files across all tasks
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.
purgeAtWhen this resource will be permanently deleted — soft-delete time + 30-day retention; null while live.
deletedByIdMember who soft-deleted this resource (server-stamped). A member id — resolve it with GET /members/{id}.
archivedArchived projects are hidden from default project lists. Archiving does NOT cascade — tasks and lists inside the project stay active. Set it with PATCH; a project cannot be created already archived.
niceIdShort project key used in task references — a project with the key PRJ has tasks that read PRJ-14. Server-generated.
descriptionOptional project description. Supports Markdown formatting.
iconIcon image URL for the project. Objects use icon; people use avatar.
portfolioIdThe portfolio this project is grouped under. Defaults to the team's General portfolio when omitted on create. Immutable after create.
defaultTasksViewDefault task board view: table, calendar, swimlane, kanban, timeline or report.
hiddenListColumnsColumns hidden on the list view. Each entry is either a built-in column key (name, assignee, dueDate, status, list, labels, estimate) or the id of a custom field attached to the project.
listColumnsOrderList-view columns in display order, using the same vocabulary as hiddenListColumns — built-in column keys and/or attached custom-field ids.
customFieldsOrderProject-level custom-field ids in display order.
taskCustomFieldsOrderTask-level custom-field ids in display order.
listCustomFieldsOrderList-level custom-field ids in display order.
projectFolderIdThe project folder this project is filed under, within its portfolio. null = unfiled.
ownerIdThe team member who owns this project. Change it with the project transfer operation — it is not settable on create or update. Null only while a project has no owner (a workspace-imported project, or one whose owner has been removed from the team).
discussionChatIdId of the project's discussion chat, or null if it has none. Fetch its messages with GET /messages?chatId=<this>. Reading those messages requires chat membership — access to the project alone is not enough. Discussion-chat messages only: this is NOT a union of the project's task, document and file comments.
defaultStatusIdThe project's first status column, where a new task lands by default. Pass it as statusId when creating a task — a task with no status is invisible on the board. null until the project has a status. Not returned on create/update responses; read it with GET /projects/{id}.
The related Actor, present only when you pass ?expand=createdByActor.
The related Actor, present only when you pass ?expand=updatedByActor.
The related Team Member, present only when you pass ?expand=deletedBy.
The linked Team Member rows, present only when you pass ?expand=members.
The related Portfolio, present only when you pass ?expand=portfolio.
The linked Chat rows, present only when you pass ?expand=discussionChat.
The linked attachedCustomField rows, present only when you pass ?expand=customFields.
Delete Project
Move this Project to trash. It disappears from list results immediately and is permanently purged after a 30-day retention window; until then it can be restored.
Required scope: projects:delete
path Parameters
id^[0-9A-Za-z_!]+$ · requiredId of the Project.
Headers
Idempotency-KeyOptional replay key (see Idempotent requests above).
Delete Project › Responses
No Content
Update Project
Partially update a Project. Only the fields you send are changed.
Required scope: projects:write
path Parameters
id^[0-9A-Za-z_!]+$ · requiredId of the Project.
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 › Request Body
nameDisplay name. Must be unique among the projects in the same portfolio. Maximum 100 characters.
descriptionOptional project description. Supports Markdown formatting.
iconIcon image URL for the project. Objects use icon; people use avatar.
initialsUp to 3 characters shown when the project has no icon. Derived from name when omitted.
color^#[0-9A-Fa-f]{6}$Primary brand colour as a 6-digit hex value, e.g. #00A99B. Assigned from the Nifty palette when omitted.
secondaryColor^#[0-9A-Fa-f]{6}$Secondary brand colour as a 6-digit hex value. Derived from color when omitted.
archivedArchived projects are hidden from default project lists. Archiving does NOT cascade — tasks and lists inside the project stay active. Set it with PATCH; a project cannot be created already archived.
accessTypeVisibility: limited (default — only invited members) or public (all team members auto-added). Omit for limited; pass public explicitly to make the project team-wide.
defaultTasksViewDefault task board view: table | calendar | swimlane | kanban | timeline | report.
hiddenListColumnsColumns hidden on the list view. Each entry is either a built-in column key (name, assignee, dueDate, status, list, labels, estimate) or the id of a custom field attached to the project.
listColumnsOrderList-view columns in display order, using the same vocabulary as hiddenListColumns — built-in column keys and/or attached custom-field ids.
customFieldsOrderProject-level custom-field ids in display order.
taskCustomFieldsOrderTask-level custom-field ids in display order.
listCustomFieldsOrderList-level custom-field ids in display order.
autoMilestonesWhen true, monthly lists are created automatically for this project. Applied at create time.
hideUsersFromGuestsHide member list from guest role
subtaskStatusEnabledEnable per-subtask status tracking
queryAllFilesQuery files across all tasks
membersTeam member ids on this project. REPLACE semantics — the array you send in the create or update body becomes the complete roster: ids you omit are removed, ids you add are invited. Omit the key to leave the roster untouched. Read the materialized rows with ?expand=members.
projectFolderIdThe project folder this project is filed under, within its portfolio. null = unfiled.
Custom-field values on this project. READ: ?expand=customFields returns the values attached to this project. WRITE: include customFields: [{ customFieldId, value }] in the create/update body to set values — each one is checked against its field definition before the write commits (value is always a string; max 50 entries per request; "" clears). Field definitions live on the read-only customField resource.
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 › Responses
OK
idUnique identifier for this resource.
createdAtCreation timestamp.
nameDisplay name. Must be unique among the projects in the same portfolio. Maximum 100 characters.
initialsUp to 3 characters shown when the project has no icon. Derived from name when omitted.
colorPrimary brand colour as a 6-digit hex value, e.g. #00A99B. Assigned from the Nifty palette when omitted.
secondaryColorSecondary brand colour as a 6-digit hex value. Derived from color when omitted.
accessTypeVisibility: limited (default — members only) or public (team-wide; all team members are added automatically). A project has exactly these two levels.
modulesFeature tabs the project exposes. SELECT only the ones this project needs — OMITTING the field enables ALL 8, which clutters a focused project. Options: tasks (the task board), milestones (dated roadmap of lists), calendar (calendar of dated items), documents (collaborative docs), files (file storage), discussion (threaded project discussions), forms (intake/survey forms), home (project overview). e.g. a content calendar → [tasks, calendar, files]; a bug tracker → [tasks]; a knowledge base → [documents, files]. Set once at create; immutable afterwards.
autoMilestonesWhen true, monthly lists are created automatically for this project. Applied at create time.
hideUsersFromGuestsHide member list from guest role
subtaskStatusEnabledEnable per-subtask status tracking
queryAllFilesQuery files across all tasks
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.
purgeAtWhen this resource will be permanently deleted — soft-delete time + 30-day retention; null while live.
deletedByIdMember who soft-deleted this resource (server-stamped). A member id — resolve it with GET /members/{id}.
archivedArchived projects are hidden from default project lists. Archiving does NOT cascade — tasks and lists inside the project stay active. Set it with PATCH; a project cannot be created already archived.
niceIdShort project key used in task references — a project with the key PRJ has tasks that read PRJ-14. Server-generated.
descriptionOptional project description. Supports Markdown formatting.
iconIcon image URL for the project. Objects use icon; people use avatar.
portfolioIdThe portfolio this project is grouped under. Defaults to the team's General portfolio when omitted on create. Immutable after create.
defaultTasksViewDefault task board view: table, calendar, swimlane, kanban, timeline or report.
hiddenListColumnsColumns hidden on the list view. Each entry is either a built-in column key (name, assignee, dueDate, status, list, labels, estimate) or the id of a custom field attached to the project.
listColumnsOrderList-view columns in display order, using the same vocabulary as hiddenListColumns — built-in column keys and/or attached custom-field ids.
customFieldsOrderProject-level custom-field ids in display order.
taskCustomFieldsOrderTask-level custom-field ids in display order.
listCustomFieldsOrderList-level custom-field ids in display order.
projectFolderIdThe project folder this project is filed under, within its portfolio. null = unfiled.
ownerIdThe team member who owns this project. Change it with the project transfer operation — it is not settable on create or update. Null only while a project has no owner (a workspace-imported project, or one whose owner has been removed from the team).
discussionChatIdId of the project's discussion chat, or null if it has none. Fetch its messages with GET /messages?chatId=<this>. Reading those messages requires chat membership — access to the project alone is not enough. Discussion-chat messages only: this is NOT a union of the project's task, document and file comments.
defaultStatusIdThe project's first status column, where a new task lands by default. Pass it as statusId when creating a task — a task with no status is invisible on the board. null until the project has a status. Not returned on create/update responses; read it with GET /projects/{id}.
The related Actor, present only when you pass ?expand=createdByActor.
The related Actor, present only when you pass ?expand=updatedByActor.
The related Team Member, present only when you pass ?expand=deletedBy.
The linked Team Member rows, present only when you pass ?expand=members.
The related Portfolio, present only when you pass ?expand=portfolio.
The linked Chat rows, present only when you pass ?expand=discussionChat.
The linked attachedCustomField rows, present only when you pass ?expand=customFields.
Search Projects
Full-text ranked search across projects. Ranked by relevance; pages are capped at 200 results. Filterable by 6 fields.
Required scope: projects:read
query Parameters
qFull-text search query. Trimmed before matching; URLs, e-mail addresses and HTML markup are rejected.
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.
purgeAt[null]Filter where purgeAt is null (pass true).
purgeAt[notNull]Filter where purgeAt is not null (pass true).
purgeAt[gt]Filter where purgeAt is greater than.
purgeAt[gte]Filter where purgeAt is greater than or equal to.
purgeAt[lt]Filter where purgeAt is less than.
purgeAt[lte]Filter where purgeAt is less than or equal to.
name[eq]Filter where name equals.
name[contains]Filter where name contains.
name[startsWith]Filter where name starts with.
archived[eq]Filter where archived equals.
accessType[eq]Filter where accessType equals.
accessType[in]Filter where accessType is one of (comma-separated list).
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.
Search Projects › Responses
OK
The page of results.
totalTotal rows matching the query (across pages).
limithasMorenextCursorOpaque cursor for the next page; null on the last page.
Transfer (Project)
Transfer project ownership to another member.
Required scope: projects:write
path Parameters
id^[0-9A-Za-z_!]+$ · requiredId of the Project.
Headers
Idempotency-KeyOptional replay key (see Idempotent requests above).
Transfer (Project) › Responses
OK
idmessageAdd members to a Project
Add an existing team member to this project.
Required scope: projects:write
path Parameters
id^[0-9A-Za-z_!]+$ · requiredId of the Project.
Headers
Idempotency-KeyOptional replay key (see Idempotent requests above).
Add members to a Project › Responses
OK
idmessageRemove members from a Project
Remove a member from this project.
Required scope: projects:delete
path Parameters
id^[0-9A-Za-z_!]+$ · requiredId of the Project.
Headers
Idempotency-KeyOptional replay key (see Idempotent requests above).
Remove members from a Project › Responses
OK
messageRestore Project
Restore a Project that was deleted, returning it to list results. Restoring one that is already active succeeds and changes nothing.
Required scope: projects:delete
path Parameters
id^[0-9A-Za-z_!]+$ · requiredId of the Project.
Headers
Idempotency-KeyOptional replay key (see Idempotent requests above).
Restore Project › Responses
OK
idUnique identifier for this resource.
createdAtCreation timestamp.
nameDisplay name. Must be unique among the projects in the same portfolio. Maximum 100 characters.
initialsUp to 3 characters shown when the project has no icon. Derived from name when omitted.
colorPrimary brand colour as a 6-digit hex value, e.g. #00A99B. Assigned from the Nifty palette when omitted.
secondaryColorSecondary brand colour as a 6-digit hex value. Derived from color when omitted.
accessTypeVisibility: limited (default — members only) or public (team-wide; all team members are added automatically). A project has exactly these two levels.
modulesFeature tabs the project exposes. SELECT only the ones this project needs — OMITTING the field enables ALL 8, which clutters a focused project. Options: tasks (the task board), milestones (dated roadmap of lists), calendar (calendar of dated items), documents (collaborative docs), files (file storage), discussion (threaded project discussions), forms (intake/survey forms), home (project overview). e.g. a content calendar → [tasks, calendar, files]; a bug tracker → [tasks]; a knowledge base → [documents, files]. Set once at create; immutable afterwards.
autoMilestonesWhen true, monthly lists are created automatically for this project. Applied at create time.
hideUsersFromGuestsHide member list from guest role
subtaskStatusEnabledEnable per-subtask status tracking
queryAllFilesQuery files across all tasks
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.
purgeAtWhen this resource will be permanently deleted — soft-delete time + 30-day retention; null while live.
deletedByIdMember who soft-deleted this resource (server-stamped). A member id — resolve it with GET /members/{id}.
archivedArchived projects are hidden from default project lists. Archiving does NOT cascade — tasks and lists inside the project stay active. Set it with PATCH; a project cannot be created already archived.
niceIdShort project key used in task references — a project with the key PRJ has tasks that read PRJ-14. Server-generated.
descriptionOptional project description. Supports Markdown formatting.
iconIcon image URL for the project. Objects use icon; people use avatar.
portfolioIdThe portfolio this project is grouped under. Defaults to the team's General portfolio when omitted on create. Immutable after create.
defaultTasksViewDefault task board view: table, calendar, swimlane, kanban, timeline or report.
hiddenListColumnsColumns hidden on the list view. Each entry is either a built-in column key (name, assignee, dueDate, status, list, labels, estimate) or the id of a custom field attached to the project.
listColumnsOrderList-view columns in display order, using the same vocabulary as hiddenListColumns — built-in column keys and/or attached custom-field ids.
customFieldsOrderProject-level custom-field ids in display order.
taskCustomFieldsOrderTask-level custom-field ids in display order.
listCustomFieldsOrderList-level custom-field ids in display order.
projectFolderIdThe project folder this project is filed under, within its portfolio. null = unfiled.
ownerIdThe team member who owns this project. Change it with the project transfer operation — it is not settable on create or update. Null only while a project has no owner (a workspace-imported project, or one whose owner has been removed from the team).
discussionChatIdId of the project's discussion chat, or null if it has none. Fetch its messages with GET /messages?chatId=<this>. Reading those messages requires chat membership — access to the project alone is not enough. Discussion-chat messages only: this is NOT a union of the project's task, document and file comments.
defaultStatusIdThe project's first status column, where a new task lands by default. Pass it as statusId when creating a task — a task with no status is invisible on the board. null until the project has a status. Not returned on create/update responses; read it with GET /projects/{id}.