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 assigneeIds to 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