Project Folder

The Project Folder API lets you search, create, update, and delete project folders in your Egnyte domain. Use this API to programmatically manage project metadata, create projects from templates, and perform cleanup operations.

Note: This API is only available to customers with project folder functionality enabled on their plan. Project folder templates require an additional feature flag.

Custom Fields & Custom Status: Projects support custom fields and custom status values. Before applying custom fields or a custom status to a project, they must first be defined via the Custom Field Definition API. See Custom Field Definition API for details.

Base URL

https://{domain}.egnyte.com/pubapi/v2/project-folders

Some endpoints use /pubapi/v1/project-folders. Version is specified per endpoint below.

Authentication

All requests require an OAuth 2.0 Bearer token in the Authorization header:

Authorization: Bearer {access_token}

See Authentication for details on obtaining a token.


List All Projects

Retrieve all project folders in the domain.

Request

GET /pubapi/v2/project-folders

Example Request

curl -i -X GET "https://{domain}.egnyte.com/pubapi/v2/project-folders" \
     -H "Authorization: Bearer YOUR_ACCESS_TOKEN"

Response

200 OK

Returns an array of project objects.

FieldTypeDescription
idstringUnique identifier for the project
rootFolderIdstringFolder ID of the project's root folder
namestringProject name
projectIdstringCustom project identifier
customerNamestringCustomer associated with the project
descriptionstringProject description
locationobjectPhysical location details
statusstringProject status. Built-in values: pending, in-progress, completed, on-hold, canceled. Returns a custom status string if one has been set.
startDatestringProject start date (ISO 8601 format)
completionDatestringProject completion date (ISO 8601 format)
createdByintegerUser ID of the creator
lastUpdatedByintegerUser ID of the last modifier
creationTimestringTimestamp of creation (ISO 8601 format)
lastModifiedTimestringTimestamp of last modification (ISO 8601 format)
customFieldsWithValuesobjectMap of custom field key-value pairs (e.g. {"priority": "high"}). Only present when the custom fields feature is enabled.

Example Response

[
  {
    "id": "a69bd625-1dc3-4dcf-98f5-8e3e3fbb0b29",
    "rootFolderId": "b133ce0d-2e79-4cf8-bf3a-8758f7b117b3",
    "name": "Acme Widgets HQ Redesign",
    "projectId": "ABC-123",
    "customerName": "Acme Widgets Co",
    "description": "Redesigned HQ for Acme Widgets",
    "location": {
      "streetAddress1": "123 Main St.",
      "streetAddress2": null,
      "city": "Anytown",
      "state": "CA",
      "country": "USA",
      "postalCode": "99999"
    },
    "status": "in-progress",
    "startDate": "2022-11-01T00:00:00.000+0000",
    "completionDate": null,
    "createdBy": 4,
    "lastUpdatedBy": 4,
    "creationTime": "2022-11-02T19:02:31.000+0000",
    "lastModifiedTime": "2022-11-02T12:09:50.000+0000",
    "customFieldsWithValues": {
      "priority": "high",
      "region": "EMEA"
    }
  }
]

Mark Folder as Project

Convert an existing folder into a project folder by adding project metadata.

Request

POST /pubapi/v1/project-folders

Request Body

FieldTypeRequiredDescription
rootFolderIdstringYesFolder ID of the folder to mark as a project
namestringYesProject name
descriptionstringNoProject description
statusstringYesProject status. Built-in values: pending, in-progress, completed, on-hold, canceled. A custom status string may also be provided (must be defined first — see Custom Field Definition API).
startDatestringNoProject start date (ISO 8601 format)
completionDatestringNoProject completion date (ISO 8601 format)
customFieldsWithValuesobjectNoMap of custom field key-value pairs to set on the project (e.g. {"priority": "high"}). Keys are case-insensitive. Custom fields must be defined first — see Custom Field Definition API.

Note: The status completed is equivalent to done.

Example Request

curl -i -X POST "https://{domain}.egnyte.com/pubapi/v1/project-folders" \
     -H "Content-Type: application/json" \
     -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
     -d '{
  "rootFolderId": "5bd7337c-b303-46a0-938d-0365352a5c74",
  "name": "Egnyte Mountain View Office",
  "description": "New office project in Mountain View, CA",
  "status": "pending",
  "startDate": "2022-05-01T12:37:56.000+0000",
  "completionDate": "2022-11-05T12:37:56.000+0000",
  "customFieldsWithValues": {
    "priority": "high",
    "region": "EMEA"
  }
}'

Response

200 OK

Returns the created project object.


Create Project from Template

Create a new project folder from a template, including folder structure, permissions, and optionally dynamic groups.

Note: This endpoint requires the project folder templates feature to be enabled on your plan.

Request

POST /pubapi/v2/project-folders

Request Body

FieldTypeRequiredDescription
parentFolderIdstringYesFolder ID where the new project will be created
templateFolderIdstringYesFolder ID of the project template
folderNamestringYesName of the new folder to create
namestringYesProject name
descriptionstringNoProject description
projectIdstringConditionalCustom project identifier (required if used in dynamic group names)
customerNamestringNoCustomer associated with the project
location.streetAddress1stringNoFirst line of street address
location.streetAddress2stringNoSecond line of street address
location.citystringNoCity
location.statestringNoState or province
location.postalCodestringNoZip or postal code
location.countrystringNo3-character country code (ISO 3166 GENC profile, e.g., USA, GBR, POL)
statusstringYesProject status. Built-in values: pending, in-progress, completed, on-hold, canceled. A custom status string may also be provided (must be defined first — see Custom Field Definition API).
startDatestringNoProject start date (ISO 8601 format)
completionDatestringNoProject completion date (ISO 8601 format)
customFieldsWithValuesobjectNoMap of custom field key-value pairs to set on the project (e.g. {"priority": "high"}). Keys are case-insensitive. Custom fields must be defined first — see Custom Field Definition API.

Example Request

curl -i -X POST "https://{domain}.egnyte.com/pubapi/v2/project-folders" \
     -H "Content-Type: application/json" \
     -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
     -d '{
  "parentFolderId": "{parentFolderId}",
  "templateFolderId": "{templateFolderId}",
  "folderName": "ABC123 - 123 Main St",
  "name": "Acme Widgets HQ",
  "description": "New HQ for Acme Widgets",
  "projectId": "ABC123",
  "customerName": "Acme Widgets",
  "status": "pending",
  "startDate": "2022-11-20",
  "completionDate": null,
  "location": {
    "streetAddress1": "123 Main St",
    "streetAddress2": null,
    "city": "Anytown",
    "state": "CA",
    "postalCode": "99999",
    "country": "USA"
  },
  "customFieldsWithValues": {
    "priority": "high",
    "region": "EMEA"
  }
}'

Response

200 OK

If the template creates dynamic groups, they are included in the response.

FieldTypeDescription
groupsCreatedarrayList of groups created from the template
groupsCreated[].idstringGroup ID
groupsCreated[].namestringGroup name

Example Response

{
  "groupsCreated": [
    {
      "id": "8b149a9e-cafc-4c86-bc0c-a6fbacd5e16f",
      "name": "ABC123 - Project Team"
    },
    {
      "id": "a183d648-dce7-4aa6-a946-993890c5a4d8",
      "name": "ABC123 - Project Managers"
    },
    {
      "id": "f42c20f1-1205-4083-b8db-04df9c8706bf",
      "name": "ABC123 - BIM"
    },
    {
      "id": "c988438b-e5f0-4ed9-b788-0f4265115926",
      "name": "ABC123 - External"
    }
  ]
}

Get Project by ID

Retrieve a specific project by its unique identifier.

Request

GET /pubapi/v2/project-folders/{project_id}

Path Parameters

ParameterTypeRequiredDescription
project_idstringYesUnique project identifier

Example Request

curl -i -X GET "https://{domain}.egnyte.com/pubapi/v2/project-folders/{projectId}" \
     -H "Authorization: Bearer YOUR_ACCESS_TOKEN"

Response

200 OK

Returns a single project object. See List All Projects for field descriptions.

Example Response

{
  "id": "a69bd625-1dc3-4dcf-98f5-8e3e3fbb0b29",
  "rootFolderId": "b133ce0d-2e79-4cf8-bf3a-8758f7b117b3",
  "name": "Acme Widgets HQ Redesign",
  "projectId": "ABC-123",
  "customerName": "Acme Widgets Co",
  "description": "Redesigned HQ for Acme Widgets",
  "location": {
    "streetAddress1": "123 Main St.",
    "streetAddress2": null,
    "city": "Anytown",
    "state": "CA",
    "country": "USA",
    "postalCode": "99999"
  },
  "status": "in-progress",
  "startDate": "2022-11-01T00:00:00.000+0000",
  "completionDate": null,
  "createdBy": 4,
  "lastUpdatedBy": 4,
  "creationTime": "2022-11-02T19:02:31.000+0000",
  "lastModifiedTime": "2022-11-02T12:09:50.000+0000",
  "customFieldsWithValues": {
    "priority": "high",
    "region": "EMEA"
  }
}

Find Project by Root Folder

Search for a project using its root folder ID.

Request

POST /pubapi/v2/project-folders/search

Request Body

FieldTypeRequiredDescription
rootFolderIdstringYesFolder ID of the project's root folder

Example Request

curl -i -X POST "https://{domain}.egnyte.com/pubapi/v2/project-folders/search" \
     -H "Content-Type: application/json" \
     -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
     -d '{
  "rootFolderId": "{parentFolderId}"
}'

Response

200 OK

Returns an array of matching project objects (typically one).

Example Response

[
  {
    "id": "a69bd625-1dc3-4dcf-98f5-8e3e3fbb0b29",
    "rootFolderId": "b133ce0d-2e79-4cf8-bf3a-8758f7b117b3",
    "name": "Acme Widgets HQ Redesign",
    "projectId": "ABC-123",
    "customerName": "Acme Widgets Co",
    "description": "Redesigned HQ for Acme Widgets",
    "location": {
      "streetAddress1": "123 Main St.",
      "streetAddress2": null,
      "city": "Anytown",
      "state": "CA",
      "country": "USA",
      "postalCode": "99999"
    },
    "status": "in-progress",
    "startDate": "2022-11-01T00:00:00.000+0000",
    "completionDate": null,
    "createdBy": 4,
    "lastUpdatedBy": 4,
    "creationTime": "2022-11-02T19:02:31.000+0000",
    "lastModifiedTime": "2022-11-02T12:09:50.000+0000",
    "customFieldsWithValues": {
      "priority": "high",
      "region": "EMEA"
    }
  }
]

Update Project

Update metadata for an existing project. At least one field must be specified.

Request

PATCH /pubapi/v2/project-folders/{project_id}

Path Parameters

ParameterTypeRequiredDescription
project_idstringYesUnique project identifier

Request Body

All fields are optional, but at least one must be provided.

FieldTypeDescription
namestringProject name
descriptionstringProject description
projectIdstringCustom project identifier
customerNamestringCustomer associated with the project
location.streetAddress1stringFirst line of street address
location.streetAddress2stringSecond line of street address
location.citystringCity
location.statestringState or province
location.postalCodestringZip or postal code
location.countrystring3-character country code (ISO 3166 GENC profile)
statusstringProject status. Built-in values: pending, in-progress, completed, on-hold, canceled. A custom status string may also be provided (must be defined first — see Custom Field Definition API).
startDatestringProject start date (ISO 8601 format)
completionDatestringProject completion date (ISO 8601 format)
customFieldsWithValuesobjectMap of custom field key-value pairs to add or update. Only the provided keys are affected; omitted keys remain unchanged. Keys are case-insensitive. Custom fields must be defined first — see Custom Field Definition API.
deleteCustomFieldsarrayList of custom field keys to remove from the project. Processed after customFieldsWithValues. Keys are case-insensitive.

Example Request

curl -i -X PATCH "https://{domain}.egnyte.com/pubapi/v2/project-folders/{projectId}" \
     -H "Content-Type: application/json" \
     -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
     -d '{
  "name": "Acme Widgets HQ Redesign",
  "description": "Redesigned HQ for Acme Widgets",
  "projectId": "ABC-123",
  "customerName": "Acme Widgets Co",
  "status": "in-progress",
  "startDate": "2022-11-01",
  "completionDate": null,
  "location": {
    "streetAddress1": "123 Main St.",
    "streetAddress2": null,
    "city": "Anytown",
    "state": "CA",
    "postalCode": "99999",
    "country": "USA"
  },
  "customFieldsWithValues": {
    "priority": "high"
  },
  "deleteCustomFields": [
    "region"
  ]
}'

Response

200 OK

Returns the updated project object.


Delete Project

Remove project metadata from a folder. The folder itself is not deleted.

Request

DELETE /pubapi/v2/project-folders/{project_id}

Path Parameters

ParameterTypeRequiredDescription
project_idstringYesUnique project identifier

Example Request

curl -i -X DELETE "https://{domain}.egnyte.com/pubapi/v2/project-folders/{projectId}" \
     -H "Authorization: Bearer YOUR_ACCESS_TOKEN"

Response

200 OK

Project metadata removed successfully.


Clean Up Project

Perform cleanup operations on a completed or canceled project, including deleting links and managing user access.

Request

POST /pubapi/v1/project-folders/{project_id}/cleanup

Path Parameters

ParameterTypeRequiredDescription
project_idstringYesUnique project identifier

Request Body

FieldTypeRequiredDescription
deleteLinksbooleanYesIf true, delete all active links in the project
usersToDeletearrayNoList of user IDs to delete
usersToDisablearrayNoList of user IDs to disable

Example Request

curl -i -X POST "https://{domain}.egnyte.com/pubapi/v1/project-folders/{projectId}/cleanup" \
     -H "Content-Type: application/json" \
     -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
     -d '{
  "deleteLinks": true,
  "usersToDelete": [
    12345
  ],
  "usersToDisable": [
    67890
  ]
}'

Response

202 Accepted

Cleanup procedure started. The operation runs asynchronously.


Error Codes

StatusErrorDescriptionResolution
400Bad RequestInvalid request body or parametersVerify all required fields are present and correctly formatted
400Reserved FieldA reserved key was provided in customFieldsWithValues or deleteCustomFieldsUse the status field to set or clear project status
400Duplicate Field KeyTwo or more keys in customFieldsWithValues (or deleteCustomFields) resolve to the same field after case-foldingEnsure all custom field keys are unique regardless of casing (e.g. "Priority" and "priority" are treated as the same key)
401UnauthorizedInvalid or expired OAuth tokenRefresh your OAuth token
403ForbiddenUser lacks permission to access project foldersEnsure the user has appropriate permissions for project management
404Not FoundProject or folder does not existVerify the project ID or folder ID is correct
409ConflictPrevious cleanup operation still in progressWait for the current cleanup to complete before starting a new one
429Rate LimitedToo many requestsImplement exponential backoff; check Retry-After header
503Service UnavailableToo many cleanup operations runningRetry the request after a delay

Reference →Browse all endpoints