API 2.0
Folders & Projects

Folders & Projects

Query Projects

Retrieve a list of company projects
/projects

Parameters

Name Required Default Type/Format Description
archived no False Boolean set to true to retrieve archived/closed projects
rootOnly no False Boolean if set to true returns only root projects

Response

Sample response →
[
    {
        "id": "PROJECT-ID",
        "name": "Client Projects",
        "description": "",
        "endDate": null,
        "estimate": null,
        "moment_created": "2015-11-14T14:52:57.26943",
        "parentProjectId": "PARENT-ID",
        "priority": 5,
        "progress": null,
        "startDate": null,
        "status": "In Progress",
        "systemStatus": 2
        "statusComments": "comments",
        "customFieldsData": {
            "CUSTOM-FIELD-ID": "CUSTOM-FIELD-VALUE"
        }
    },
    ...
]

Get Project

Get project details
/project/PROJECT-ID

Response

Sample response →
{
    "id": "PROJECT-ID",
    "name": "Client Project",
    "description": "",
    "endDate": null,
    "estimate": null,
    "moment_created": "2015-11-14T14:52:57.26943",
    "parentProjectId": "PARENT-PROJECT-ID",
    "priority": 5,
    "progress": null,
    "startDate": null,
    "status": "In Progress",
    "statusComments": "",
    "systemStatus": 2,
    "customFieldsData": {
        "CUSTOM-FIELD-ID": "CUSTOM-FIELD-VALUE"
    },
    "settings": {
        "workItems": [
          "ATTACHMENT",
          "DISCUSSION",
          "DOCUMENT",
          "EVENT",
          "MEETING",
          "PROJECT",
          "REQUEST_FORM",
          "TASK",
          "EXPENSE"
        ],
        "additionalTaskCustomFields": ["CUSTOM-FIELD-ID", ],
        "taskCustomWorkflow": ["STATUS-ID", ],
        "taskTypes": ["TASK-TYPE-ID", ],
    }
}

Update Project

Update project properties. All the parameters are optional and won't be updated if not passed. Set to null to reset.
/project/PROJECT-ID

Parameters

Name Required Type/Format Description
userId yes String User on behalf of whom API will execute update
name no String Project name
description no String Project description
color no Integer Project color (1-24)
health no Integer Project health (0,1,2,null)
statusComments no String Project status comments
parentProjectId no String Move a project to a different project/folder
ownerUserId no String Set the project owner. The user must already be a member of the project. Pass 'null' to remove the current owner
startDate no YYYY-MM-DD Project start date, 'null' to reset
endDate no YYYY-MM-DD Project end date, 'null' to reset
priority no Integer Project priority (1-10), 50 - Blocker, 100 - Emergency
estimate no Integer Project estimate in minutes, 'null' to reset
progress no Integer Project progress percentage (0-100) or 'null' to reset
systemStatus no Integer Pass 5 to archive, 2 to re-open
statusId no String Project status id. Not supported for folders and tags. If both statusId and systemStatus are passed, statusId wins. The project's system status will be set automatically based on the chosen status (archiving it if the status is a closed one)
Sample CURL →
curl -X PUT 
    https://api.goodday.work/2.0/project/PROJECT-ID 
    -H "Content-Type: application/json" 
    -H "gd-api-token: AUTH-TOKEN" 
    -d '{
        "userId": "USER-ID",
        "startDate":"2023-01-15",
        "endDate":"2023-01-25",
        "progress":70
        }'

Create Folder

Create new workfolder
/projects/new-folder

Parameters

Name Required Type/Format Description
createdByUserId yes String ID of a user, a new record is created on behalf of
parentProjectId no String Pass parent project ID to create a subfolder
name yes String Folder name
color no Integer Folder color (1..24)
Sample CURL →

curl -X POST 
    https://api.goodday.work/2.0/projects/new-folder 
    -H "Content-Type: application/json" 
    -H "gd-api-token: AUTH-TOKEN" 
    -d '{
        "createdByUserId": "USER-ID",
        "name": "New Folder name",
        "parentProjectId": "PROJECT-ID"
        }'    
    

Response

Sample response →
{
    "id": "PROJECT-ID",
    "name": "Folder Name",
    "description": "",
    "endDate": null,
    "estimate": null,
    "moment_created": "2015-11-14T14:52:57.26943",
    "parentProjectId": "PARENT-PROJECT-ID",
    "priority": 5,
    "progress": null,
    "startDate": null,
    "status": "In Progress",
    "statusComments": "",
    "systemStatus": 2
}

Create Project

Create new project
/projects/new-project

Parameters

Name Required Type/Format Description
createdByUserId yes String ID of a user, a new record is created on behalf of
projectTemplateId yes String Project template (type) ID you can find in Organization settings → Project templates
parentProjectId no String Pass parent project ID to create a sub project
name yes String Project name
color no Integer Folder color (1..24)
projectOwnerUserId no String Project owner user ID
startDate no YYYY-MM-DD Project start date
endDate no YYYY-MM-DD Project end date
deadline no YYYY-MM-DD Project deadline
Sample CURL →

curl -X POST 
    https://api.goodday.work/2.0/projects/new-project 
    -H "Content-Type: application/json" 
    -H "gd-api-token: AUTH-TOKEN" 
    -d '{
        "createdByUserId": "USER-ID",
        "projectTemplateId": "TEMPLATE-ID",
        "name": "New Project name",
        "parentProjectId": "PARENT-PROJECT-ID",
        "projectOwnerUserId": "PROJECT-OWNER-USER-ID",
        "deadline": "2020-04-01"        
        }'    
    

Response

Sample response →
{
    "id": "PROJECT-ID",
    "name": "New Project Name",
    "description": "",
    "endDate": null,
    "estimate": null,
    "moment_created": "2020-03-28T14:52:57.26943",
    "parentProjectId": "PARENT-PROJECT-ID",
    "priority": 5,
    "progress": null,
    "startDate": null,
    "status": "In Progress",
    "statusComments": "",
    "systemStatus": 2
}

Query project tasks

Retrieve a list of project tasks
/project/PROJECT-ID/tasks

Parameters

Name Required Default Type/Format Description
closed no False Boolean set to true to retrieve all open and closed tasks
subfolders no False Boolean if set to true returns tasks from project it's subfolders

Response

Sample response →
[
    {
        "id": "TASK-ID",
        "shortId": "75",
        "actionRequiredUserId": USER-ID,
        "assignedToUserId": "USER-ID",
        "createdByUserId": "USER-ID",
        "customFieldsData": {
            "CUSTOM-FIELD-ID": "CUSTOM-FIELD-VALUE"
        },
        "deadline": null,
        "endDate": null,
        "estimate": null,
        "momentClosed": null,
        "momentCreated": "2018-09-07T19:35:32.09136",
        "name": "Sample task name",
        "parentTaskId": null,
        "priority": 5,
        "progress": null,
        "projectId": "PROJECT-ID",
        "recentActivityMoment": "2018-10-30T15:15:20.437519",
        "reportedTime": null,
        "scheduleDate": null,
        "scheduleStatus": 0,
        "startDate": null,
        "status": {
            "id": "STATUS-ID",
            "name": "New"
            },
        "systemStatus": 1,
        "systemType": 1,
        "taskType": {
            "id": "TASK-TYPE-ID",
            "name": "Task"
        },
        "users": [
            "USER-ID",
            "USER-ID"
        ],
        "formSubmission": null
    },
    {
        "id": "TASK-ID",
        "shortId": "76",
        "actionRequiredUserId": "USER-ID",
        "assignedToUserId": "USER-ID",
        "createdByUserId": null,
        "customFieldsData": {
            "CUSTOM-FIELD-ID": "CUSTOM-FIELD-VALUE"
        },
        "deadline": null,
        "endDate": null,
        "estimate": null,
        "momentClosed": null,
        "momentCreated": "2018-09-08T10:00:00.000000",
        "name": "Support request from form",
        "parentTaskId": null,
        "priority": 5,
        "progress": null,
        "projectId": "PROJECT-ID",
        "recentActivityMoment": "2018-09-08T10:00:00.000000",
        "reportedTime": null,
        "scheduleDate": null,
        "scheduleStatus": 0,
        "startDate": null,
        "status": {
            "id": "STATUS-ID",
            "name": "New"
        },
        "systemStatus": 1,
        "systemType": 1,
        "taskType": {
            "id": "TASK-TYPE-ID",
            "name": "Task"
        },
        "users": [
            "USER-ID"
        ],
        "formSubmission": {
            "requestFormName": "Technical Support",
            "formFields": [
                {
                    "config": {
                        "fieldId": "request-type",
                        "label": "Request type",
                        "type": "dropdown",
                        "options": ["Bug", "Feature", "Other"],
                        "isRequired": false,
                        "description": ""
                    },
                    "value": "Bug"
                },
                {
                    "config": {
                        "fieldId": "form-field-3",
                        "label": "Description",
                        "type": "textarea",
                        "isRequired": false,
                        "description": ""
                    },
                    "value": "Login page throws 500 error"
                }
            ]
        }
    },
    ...
]

Query tag tasks

Retrieve a list of tag tasks
/tag/TAG-ID/tasks

Parameters

Name Required Default Type/Format Description
closed no False Boolean set to true to retrieve all open and closed tasks

Response

Sample response →
[
    {
        "id": "TASK-ID",
        "shortId": "75",
        "actionRequiredUserId": USER-ID,
        "assignedToUserId": "USER-ID",
        "createdByUserId": "USER-ID",
        "customFieldsData": {
            "CUSTOM-FIELD-ID": "CUSTOM-FIELD-VALUE"
        },
        "deadline": null,
        "endDate": null,
        "estimate": null,
        "momentClosed": null,
        "momentCreated": "2018-09-07T19:35:32.09136",
        "name": "Sample task name",
        "parentTaskId": null,
        "priority": 5,
        "progress": null,
        "projectId": "PROJECT-ID",
        "recentActivityMoment": "2018-10-30T15:15:20.437519",
        "reportedTime": null,
        "scheduleDate": null,
        "scheduleStatus": 0,
        "startDate": null,
        "status": {
            "id": "STATUS-ID",
            "name": "New"
            },
        "systemStatus": 1,
        "systemType": 1,
        "taskType": {
            "id": "TASK-TYPE-ID",
            "name": "Task"
        },
        "users": [
            "USER-ID",
            "USER-ID"
        ]
    },
    ...
]

Query project users

Retrieve project users list
/project/PROJECT-ID/users

Response

Sample response →
[
    {
        "access": "Standard",
        "id": "USER-ID",
        "name": "Alex Kim",
        "primaryEmail": "alex@company.com",
        "watchAll": false
    },
    ...
]

Add user to project

Add a company member to a project. For a non-Workspace project the user must already be a member of the Workspace.
/project/PROJECT-ID/user/USER-ID

Parameters

Name Required Type/Format Description
userId yes String User on behalf of whom API will execute the action
access yes Integer Project access level: 1 = Limited, 2 = Standard, 3 = Full
Sample CURL →
curl -X POST
    https://api.goodday.work/2.0/project/PROJECT-ID/user/USER-ID
    -H "Content-Type: application/json"
    -H "gd-api-token: AUTH-TOKEN"
    -d '{
        "userId": "CALLER-USER-ID",
        "access": 2
        }'

Update project user access

Change a user's access level in a project. If the new access is "Read only" or "Read only + comment", any items currently assigned to the user in this project (tasks, milestones, sub-projects) are automatically unassigned or reassigned to the project owner, since a read-only user cannot own work.
/project/PROJECT-ID/user/USER-ID

Parameters

Name Required Type/Format Description
userId yes String User on behalf of whom API will execute the action
access yes Integer New access level: -10 = Read only, -5 = Read only + comment, 1 = Limited, 2 = Standard, 3 = Full
Sample CURL →
curl -X PUT
    https://api.goodday.work/2.0/project/PROJECT-ID/user/USER-ID
    -H "Content-Type: application/json"
    -H "gd-api-token: AUTH-TOKEN"
    -d '{
        "userId": "CALLER-USER-ID",
        "access": 3
        }'

Remove user from project

Remove a user from a project. Any items currently assigned to the user (tasks, milestones, sub-projects) are automatically reassigned to the project owner. The project owner cannot be removed (change the owner first via PUT /project/PROJECT-ID). Users cannot be removed from public projects or when they are inherited from a parent project, a team, or have company-wide full access.
/project/PROJECT-ID/user/USER-ID

Parameters

Name Required Type/Format Description
userId yes String User on behalf of whom API will execute the action
Sample CURL →
curl -X DELETE
    https://api.goodday.work/2.0/project/PROJECT-ID/user/USER-ID
    -H "Content-Type: application/json"
    -H "gd-api-token: AUTH-TOKEN"
    -d '{
        "userId": "CALLER-USER-ID"
        }'

Get Project History

Retrieve a list of history events for a projec
/projects/PROJECT-ID/history

Response

Sample response →
[
    {
        "eventType": "STATUS_COMMENTS_UPDATED",
        "id": "HISTORY-EVENT-ID",
        "momentCreated": "2025-09-22T09:56:59.118157",
        "params": {
            "newValue": "Status updated...",
            "oldValue": null
        },
        "userId": "USER-ID"
    },
    ...
]