canonical: https://jentic.com/apis/goodday.work/goodday

# Goodday Work GoodDay API

The GoodDay API provides 36 endpoints across users, projects, tasks, events, time reports, and documents for the GoodDay project management platform. It covers task creation, status changes, comments, time tracking, and project hierarchy queries, plus user-level views of action-required and assigned tasks. Authentication is a gd-api-token header, and the API is the integration surface for teams that run multiple projects, agile boards, and time-tracked engagements inside GoodDay.

## For AI agents

Manage GoodDay projects, tasks, time reports, events, documents, and users through 36 endpoints under api.goodday.work/2.0.

## Scope

Does not handle chat messaging, video meetings, or invoice payment processing - use for GoodDay project, task, time-report, event, document, and user operations only.

## Capabilities

- Create projects and folders inside the GoodDay organisation hierarchy
- Create tasks within a project, assign them to users, and update their status
- Query the action-required and assigned-task lists for any user
- Read and write time reports against tasks for billing and capacity tracking
- Manage events and documents associated with a project
- Read user hourly rate history to support project profitability reports

## Use cases

### Project Bootstrap Automation

Operations teams script new-client onboarding by creating a folder, the underlying project, and a templated set of tasks in GoodDay through the API. POST `/projects/new-folder` and POST `/projects/new-project` handle the hierarchy, then a loop creates tasks against `/project/{projectId}/tasks` so the team starts a new engagement in minutes.

Example prompt: Create folder 'Client Acme', create project 'Acme - Q3 implementation' under it, and add tasks 'Kickoff', 'Discovery', and 'Design' to the new project.

### Time Tracking and Billing

Agencies pull time reports per user and per project to feed billing systems. `/user/{userId}/time-reports` returns the entries logged by an individual, and combining that with `/user/{userId}/hourly-rate-history` lets a script generate accurate invoices that respect rate changes mid-engagement.

Example prompt: Pull time reports for user user_42 between 2026-06-01 and 2026-06-30, multiply each entry by the matching hourly rate, and produce an invoice line per project.

### Daily Personal Standup

An automation pulls each team member's action-required tasks every morning and posts them into a chat channel so standups stay short. The `/user/{userId}/action-required-tasks` endpoint returns precisely the tasks GoodDay flags as awaiting that user, which is more actionable than a flat assigned-task list.

Example prompt: Get the action-required tasks for each member of team_eng and post a summary to a chat channel.

### AI Project Manager Agent via Jentic

An AI project manager agent can triage a backlog by reading tasks, updating status, and assigning owners through Jentic. The agent finds the GoodDay operations by intent, loads the task schema, and executes with the gd-api-token held in the vault - no manual REST plumbing.

Example prompt: Read the open tasks in project proj_42, assign any unassigned task to the project lead, and move stale tasks back to 'Backlog'.

## Key endpoints

| Method | Path | Description |
| --- | --- | --- |
| GET | `/users` | Query organisation users |
| GET | `/user/{userId}/action-required-tasks` | Tasks awaiting a user |
| GET | `/user/{userId}/time-reports` | Time reports for a user |
| POST | `/projects/new-project` | Create a project |
| POST | `/projects/new-folder` | Create a project folder |
| GET | `/project/{projectId}/tasks` | List tasks in a project |
| PUT | `/project/{projectId}` | Update a project |

## Key resources

- **Users** — Read users, hourly rate history, and assigned or action-required tasks
- **Projects** — Create folders and projects, read project hierarchy, list project tasks
- **Tasks** — Create, update, and read tasks within a project
- **Time Reports** — Read time entries by user, task, or project
- **Events** — Manage events associated with projects
- **Documents** — Read documents attached to tasks and projects

## Why Jentic

- **Setup:** Wiring GoodDay by hand means passing the gd-api-token header against api.goodday.work, scoping calls to one organisation, and mapping the project, task, and time-report endpoints yourself. Through Jentic you install once, import GoodDay from the API Directory, store the token once, and your agent calls it.
- **Permission scoping:** GoodDay puts the project id and user id in the URL path (`/project/{projectId}/tasks` and `/user/{userId}/...`), so a rule can pin your agent to one project: it can list and read that project's tasks and nothing else. You choose the operations it may call, so ones like creating a project or updating project settings are not included unless you add them.
- **Credential handling:** Your GoodDay token is stored once, encrypted, by your own Jentic One instance and injected at execution time. It never enters the agent's prompt, logs, or context.
- **Discovery method:** Agents search Jentic by intent such as 'list a user's assigned tasks' or 'create a goodday task', and Jentic returns the matching GoodDay operation with its input schema so the agent calls the right endpoint without browsing the reference.

## Related APIs

- **Asana** — Mature work management API with broad ecosystem coverage and team-level reporting.
- **ClickUp** — Highly customisable task and project platform with similar hierarchy semantics.
- **Slack** — Pushes GoodDay task changes into the channels where teams already work.

## FAQ

### What authentication does the GoodDay API use?

GoodDay uses an apiKey scheme on the gd-api-token header. Through Jentic the token is stored encrypted in the vault and scoped to a single GoodDay organisation, so the raw token never enters the agent's context.

### Can I create a project with the GoodDay API?

Yes. POST `/projects/new-project` creates a project, and POST `/projects/new-folder` creates a parent folder for it. After creation, POST `/project/{projectId}/tasks` adds tasks against the new project.

### What are the rate limits for the GoodDay API?

GoodDay applies per-organisation rate limits documented at goodday.work/help. The OpenAPI spec does not encode exact numbers, so check GoodDay's API docs before running large historical pulls - list endpoints such as /users and /projects support pagination.

### How do I pull a user's open tasks through Jentic?

Search Jentic for 'goodday tasks assigned to a user', load the schema for GET `/user/{userId}/assigned-tasks` (or /action-required-tasks for the narrower view), and execute with the user ID. Jentic injects the gd-api-token at execution and returns the task list.

### Does the API expose hourly rate history?

Yes. GET `/user/{userId}/hourly-rate-history` returns each rate change with its effective date, which is essential for accurate retrospective billing and profitability reports across long engagements.

### Can the API send chat messages on behalf of a user?

No. The GoodDay API focuses on projects, tasks, time, events, and documents. For chat-style notifications, pair with Slack or another messaging API and trigger from a webhook or scheduled GoodDay query.

### Can I limit what my agent is allowed to do with the GoodDay API?

Yes. Because GoodDay puts the project id and user id in the URL path, such as `/project/{projectId}/tasks` and `/user/{userId}/time-reports`, your self-hosted Jentic One instance lets you write a rule that pins the agent to a single project so it can only list and read that project's tasks. You decide which operations the agent may call, so write actions like POST `/projects/new-project` or PUT `/project/{projectId}` are excluded unless you explicitly add them. Your GoodDay token stays with your own instance and is injected at execution, never entering the agent's context.
