Introduction
The GanttFather API is a REST interface to your projects at:
https://api.ganttfather.com/v1
Authenticate with a token and read or write your tasks, dependencies, and resources over HTTPS. Anything you can do to a project in the app, you can do from a script or integration with plain curl.
Connecting an AI assistant (Claude, ChatGPT, Cursor) instead of writing REST calls yourself? See the MCP server guide — same token, a higher-level tool interface.
1. Create a token
In the GanttFather app open Settings → AI Agents & API and create a token. Two scopes exist:
- Project tokens are pinned to the projects you grant them — good for single-integration automations.
- Account tokens act as you, on any project you can access — good for personal scripts.
Copy the glt_… value once — only its hash is stored.
The same token also works with the AI-agent integration, if you use it — one credential, two surfaces. You don’t need to know anything about that to use the API.
2. List your projects
curl https://api.ganttfather.com/v1/projects \
-H "Authorization: Bearer glt_YOUR_TOKEN"
[
{ "id": "0197…", "name": "Website relaunch", "active": true, "readOnlyReason": null }
]
3. Create a task
curl -X POST https://api.ganttfather.com/v1/projects/{projectId}/tasks \
-H "Authorization: Bearer glt_YOUR_TOKEN" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: create-task-001" \
-d '{
"name": "Draft launch checklist",
"startDate": "2026-07-07",
"endDate": "2026-07-10",
"status": "InProgress"
}'
The response is 201 Created with the task body. Two things happened server-side worth knowing:
- The task was assigned to your token’s integration identity — each token gets its own member row on the project roster, so work created over the API is clearly attributed to the integration rather than to a person. Pass
assigneeIdsto assign people instead. - Your team saw it appear live — API writes broadcast over the same realtime channel the app uses, so open boards update without a refresh.
4. Update it — status and progress stay in sync
curl -X PATCH https://api.ganttfather.com/v1/tasks/{taskId} \
-H "Authorization: Bearer glt_YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{ "status": "Done" }'
Setting a status derives the matching progress server-side (Done → 100); setting progress derives the status. Send both to control them explicitly.
Next
- Authentication → scopes, permissions, and how denials behave
- Pagination → how large task lists page
- Tasks → the full endpoint set, starting with list tasks