Kehittäjille

Rakenna Planituden kanssa

REST API, allekirjoitetut webhookit ja MCP-palvelin: pidä järjestelmäsi synkronoituna suunnitelman kanssa, reagoi jokaiseen muutokseen ja anna tekoälyavustajan työskennellä projekteissasi.

Koodi, kenttien nimet ja tekninen viitedokumentaatio ovat englanniksi, kuten useimmissa API-dokumentaatioissa.

Perus-URL: https://planitude.app

Pyynnöt ja vastaukset ovat JSON-muodossa HTTPS:n yli. Kestot ja viiveet ovat työminuutteina (8 tunnin päivä on 480), ajanhetket ovat ISO 8601 -muodossa UTC-aikana ja päivämäärät ilman kellonaikaa muodossa YYYY-MM-DD.

Pyyntö
curl https://planitude.app/api/auth/me \
  -H "Authorization: Bearer $PLANITUDE_API_KEY"
Vastaus200 OK
{
  "user": {
    "id": "b1666432-132a-4ea9-b1ae-76ea69e226c5",
    "email": "[email protected]",
    "name": "Anna Rossi",
    "avatarUrl": null,
    "locale": "en",
    "emailVerified": true
  }
}

Pikaopas

Nollasta ensimmäiseen webhookiin kolmessa vaiheessa. Tarvitset vain päätteen.

  1. Luo API-avain

    Avaa Profiili → API-avaimet, valitse Luku ja kirjoitus ja kopioi avain: se alkaa merkinnällä gnt_ ja näytetään vain kerran. Säilytä se ympäristömuuttujassa.

  2. Tee ensimmäinen kutsusi

    Listaa projektit, jotka näet. Avain toimii sinuna: samat projektit, samat roolit.

  3. Vastaanota webhook

    Tilaa julkinen HTTPS-päätepiste tarvitsemiisi tapahtumiin, lähetä sitten heti testitapahtuma ja varmenna sen allekirjoitus.

1Terminal
export PLANITUDE_API_KEY="gnt_…"
2
curl https://planitude.app/api/projects \
  -H "Authorization: Bearer $PLANITUDE_API_KEY"
Odotettu tulos200 OK
{
  "projects": [
    {
      "id": "40be00e0-7e34-4f7a-864b-5cc986f575b8",
      "workspaceId": "824650d2-d0b3-4cac-8df8-5743ae9ff65a",
      "key": "WHX",
      "keyLocked": false,
      "name": "Warehouse expansion",
      "description": null,
      "startDate": "2026-10-05",
      "calendarId": null,
      "currency": "EUR",
      "scheduleFrom": "forward",
      "deadline": null,
      "color": null,
      "settings": {},
      "archivedAt": null,
      "createdBy": "b1666432-132a-4ea9-b1ae-76ea69e226c5",
      "createdAt": "2026-10-01T08:30:12.418Z",
      "updatedAt": "2026-10-01T08:30:12.418Z",
      "workspaceName": "Acme Construction",
      "role": "owner",
      "taskCount": 12,
      "finishAt": "2026-10-07T15:00:00.000Z"
    }
  ]
}
3
curl -X POST https://planitude.app/api/webhooks \
  -H "Authorization: Bearer $PLANITUDE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "url": "https://example.com/hooks/planitude",
  "events": [
    "task.created",
    "task.completed"
  ],
  "projectId": "40be00e0-7e34-4f7a-864b-5cc986f575b8"
}'
Esimerkkikuormawebhook.ping
{
  "id": "6f1c1d1e-2f4b-4d0a-9a77-2a3c5b1e9f10",
  "type": "webhook.ping",
  "apiVersion": "2026-10-01",
  "createdAt": "2026-10-01T08:30:12.418Z",
  "workspaceId": "824650d2-d0b3-4cac-8df8-5743ae9ff65a",
  "projectId": "40be00e0-7e34-4f7a-864b-5cc986f575b8",
  "actor": {
    "id": "b1666432-132a-4ea9-b1ae-76ea69e226c5",
    "name": "Anna Rossi"
  },
  "data": {
    "message": "Planitude webhook test",
    "webhook": {
      "id": "1747ee7f-a395-4d3c-94b0-54b513d71d88",
      "name": "Warehouse sync",
      "events": [
        "task.created",
        "task.completed"
      ]
    }
  }
}

Todennus

Todenna jokainen pyyntö henkilökohtaisella API-avaimella Authorization-otsakkeessa Bearer-tokenina. Avaimet ovat henkilökohtaisia: ne toimivat sinuna, roolillasi kussakin projektissa, eivät koskaan laajemmin. Voit rajata avaimen yhteen työtilaan, antaa sille vanhenemisajan ja perua sen milloin tahansa; jokainen kutsu kirjataan avaimen yhteyteen.

Oikeudet

OikeusSallii
readplanitude:readLue projekteja, tehtäviä, riippuvuuksia, jäseniä, kommentteja, perusarvioita ja webhookeja.
writeplanitude:writeKaikki lukuoikeuden lisäksi: projektien, tehtävien, riippuvuuksien, kommenttien, perusarvioiden ja webhookien luonti ja muokkaus.

Avaimet ja OAuth-sovellukset eivät voi poistaa projekteja tai tehtäviä: poistaminen tehdään vain verkkosovelluksessa, jossa ihminen vahvistaa sen. Väärää tunnistetta käyttävä skripti ei voi pyyhkiä suunnitelmaa.

OAuth 2.1 kolmannen osapuolen sovelluksille

Sovellukset, jotka toimivat muiden ihmisten puolesta, käyttävät OAuth 2.1:tä: valtuutuskoodi PKCE:llä (S256), jokaisella käytöllä kierrätettävät päivitystokenit, dynaaminen asiakasrekisteröinti (RFC 7591). Pyydä resurssia https://planitude.app/api ja oikeutta planitude:read tai planitude:write.

Päätepisteet julkaistaan standardeissa löytödokumenteissa, joten OAuth-kirjastot määrittävät itsensä itse.

  • https://planitude.app/.well-known/oauth-authorization-server
  • https://planitude.app/.well-known/oauth-protected-resource

Hyvät käytännöt

  • Säilytä avaimia ympäristömuuttujissa tai salaisuuksienhallinnassa, älä koskaan koodissa tai repositoriossa. Avaimet alkavat merkinnällä gnt_, joten salaisuuksien skannerit tunnistavat ne.
  • Käytä vain luku -avainta, kun vain luet, ja yhtä avainta integraatiota kohti: voit perua yhden pysäyttämättä muita.
  • Anna skripteissä käytetyille avaimille vanhenemisaika ja kierrätä ne.
  • Kutsu APIa palvelimeltasi, älä selaimesta: käyttöliittymäkoodissa oleva avain on julkinen avain.
Bearercurl
curl https://planitude.app/api/projects \
  -H "Authorization: Bearer $PLANITUDE_API_KEY"
OAuth 2.1/.well-known/oauth-authorization-server
{
  "issuer": "https://planitude.app",
  "authorization_endpoint": "https://planitude.app/oauth/authorize",
  "token_endpoint": "https://planitude.app/api/oauth/token",
  "registration_endpoint": "https://planitude.app/api/oauth/register",
  "revocation_endpoint": "https://planitude.app/api/oauth/revoke",
  "scopes_supported": [
    "planitude:read",
    "planitude:write"
  ],
  "grant_types_supported": [
    "authorization_code",
    "refresh_token"
  ],
  "code_challenge_methods_supported": [
    "S256"
  ]
}

Virheet

Planitude käyttää HTTP:n vakiotilakoodeja. Virheillä on aina sama JSON-rakenne: vakaa error-koodi, jonka perusteella haarautua, ja tarvittaessa details, jossa syy tai korjattavat kentät.

TilaMerkitys
400invalid_requestPyyntö ei ole kelvollinen: details.fields luettelee kunkin kentän ja ongelman.
401unauthorizedAvain puuttuu, on virheellinen, peruttu tai vanhentunut.
403forbiddenAvaimesi tai roolisi ei salli tätä (details.reason), esimerkiksi kirjoitus vain luku -avaimella tai poisto.
404not_foundEi löytynyt tai ei näkyvissä sinulle.
409dependency_cycleRistiriita suunnitelman kanssa, esimerkiksi riippuvuus, joka sulkisi silmukan (dependency_cycle).
429rate_limitedLiikaa pyyntöjä: odota Retry-After-otsakkeessa ilmoitettu sekuntimäärä.
500server_errorJokin meni pieleen meidän päässämme: yritä uudelleen eksponentiaalisella viiveellä.

Error

KenttäTyyppiKuvaus
error
pakollinen
stringStable error code: invalid_request, unauthorized, forbidden, not_found, conflict, dependency_cycle, limit_exceeded, rate_limited, server_error, ...
detailsobject
Vastaus
{
  "error": "invalid_request",
  "details": {
    "fields": [
      {
        "path": "name",
        "message": "Invalid input: expected string, received undefined"
      },
      {
        "path": "durationMin",
        "message": "Too small: expected number to be >=0"
      }
    ]
  }
}

Pyyntörajat

Rajat koskevat avainta liukuvassa yhden minuutin ikkunassa: 240 lukupyyntöä ja 60 kirjoituspyyntöä. Rajan ylittyessä saat vastauksen 429 rate_limited ja Retry-After-otsakkeen sekunteina.

Odota Retry-After-aikaa ennen uudelleenyritystä, hajauta massatyö ajallisesti ja ryhmittele useita muutoksia yhteen muutosjoukkoon: enintään 1 000 muutosta yhdessä pyynnössä ja yhdellä uudelleenlaskennalla.

VastausHTTP
HTTP/1.1 429 Too Many Requests
Retry-After: 12
Content-Type: application/json

{
  "error": "rate_limited",
  "details": {
    "retryAfterSec": 12
  }
}

Sivutus ja haku

Tehtävälistat sivutetaan kursorilla. Anna limit (1–500, oletus 100) ja seuraavaa sivua varten edellisen vastauksen nextCursor arvona cursor. Kun nextCursor on null, sivuja ei ole enempää.

Suodata kentillä externalId (täsmällinen vastaavuus omaan tunnisteeseesi), q (nimi sisältää), updatedSince ja completed; lajittele arvolla sort=-number (uusin ensin) tai -updatedAt. Lyhyemmät listat, kuten projektit, jäsenet ja riippuvuudet, palautetaan kokonaisina yhdessä vastauksessa.

Pyyntö
curl "https://planitude.app/api/projects/40be00e0-7e34-4f7a-864b-5cc986f575b8/tasks?limit=500" \
  -H "Authorization: Bearer $PLANITUDE_API_KEY"

# next page: pass the nextCursor of the previous response
curl "https://planitude.app/api/projects/40be00e0-7e34-4f7a-864b-5cc986f575b8/tasks?limit=500&cursor=$NEXT_CURSOR" \
  -H "Authorization: Bearer $PLANITUDE_API_KEY"

Versiointi

API ja webhook-kuormat versioidaan päivämäärällä. Nykyinen versio on 2026-10-01: se on jokaisen tapahtuman apiVersion-kenttä ja OpenAPI-dokumentin info.version.

Version sisällä vain lisäämme: uusia päätepisteitä, uusia valinnaisia kenttiä, uusia tapahtumatyyppejä. Kenttiä ei koskaan poisteta eikä niiden tyyppiä muuteta ilman uutta versiota, joten ohita kentät, joita et tunne.

Pyyntö
curl https://planitude.app/api/webhooks/events
Vastaus200 OK
{
  "apiVersion": "2026-10-01",
  "events": [
    "project.created",
    "project.updated",
    "project.deleted",
    "task.created",
    "task.updated",
    "task.deleted",
    "task.completed",
    "task.dates_changed",
    "dependency.created",
    "dependency.deleted",
    "baseline.saved",
    "member.invited",
    "member.joined",
    "comment.created"
  ]
}

API-viite

Account

Who is calling, and their workspaces.

User

Attribuutit

KenttäTyyppiKuvaus
idstring (uuid)
emailstring (email)
namestringvoi olla null
avatarUrlstringvoi olla null
localestring
emailVerifiedboolean
ObjektitUser
{
  "id": "b1666432-132a-4ea9-b1ae-76ea69e226c5",
  "email": "[email protected]",
  "name": "Anna Rossi",
  "avatarUrl": null,
  "locale": "en",
  "emailVerified": true
}

Workspace

Attribuutit

KenttäTyyppiKuvaus
idstring (uuid)
namestring
rolestring

Yksi arvoista: owner, admin, member

ObjektitWorkspace
{
  "id": "824650d2-d0b3-4cac-8df8-5743ae9ff65a",
  "name": "Acme Construction",
  "role": "owner"
}

Current user (connection test)

GET/api/auth/me

Avain lukuoikeudella

Palauttaa

200 OK The user

KenttäTyyppiKuvaus
userUser
Pyyntö
curl https://planitude.app/api/auth/me \
  -H "Authorization: Bearer $PLANITUDE_API_KEY"
Vastaus200 OK
{
  "user": {
    "id": "b1666432-132a-4ea9-b1ae-76ea69e226c5",
    "email": "[email protected]",
    "name": "Anna Rossi",
    "avatarUrl": null,
    "locale": "en",
    "emailVerified": true
  }
}

Workspaces of the user, with role

GET/api/workspaces

Avain lukuoikeudella

Palauttaa

200 OK Workspaces

KenttäTyyppiKuvaus
workspacesarray of Workspace
Pyyntö
curl https://planitude.app/api/workspaces \
  -H "Authorization: Bearer $PLANITUDE_API_KEY"
Vastaus200 OK
{
  "workspaces": [
    {
      "id": "824650d2-d0b3-4cac-8df8-5743ae9ff65a",
      "name": "Acme Construction",
      "role": "owner"
    }
  ]
}

API-viite

Projects

Projects, templates and baselines.

Project

A project as returned by the write endpoints and project listings.

Attribuutit

KenttäTyyppiKuvaus
idstring (uuid)
workspaceIdstring (uuid)
keystringProject key, e.g. CRON (task keys are CRON-12).
keyLockedboolean
namestring
descriptionstringvoi olla null
startDatestring (date)
calendarIdstring (uuid)voi olla null
currencystring
scheduleFromstring

Yksi arvoista: forward, backward

deadlinestring (date)voi olla null
colorstringvoi olla null
settingsobject
archivedAtstring (date-time)voi olla null
createdBystring (uuid)voi olla null
createdAtstring (date-time)
updatedAtstring (date-time)
ObjektitProject
{
  "id": "40be00e0-7e34-4f7a-864b-5cc986f575b8",
  "workspaceId": "824650d2-d0b3-4cac-8df8-5743ae9ff65a",
  "key": "WHX",
  "keyLocked": false,
  "name": "Warehouse expansion",
  "description": null,
  "startDate": "2026-10-05",
  "calendarId": null,
  "currency": "EUR",
  "scheduleFrom": "forward",
  "deadline": null,
  "color": null,
  "settings": {},
  "archivedAt": null,
  "createdBy": "b1666432-132a-4ea9-b1ae-76ea69e226c5",
  "createdAt": "2026-10-01T08:30:12.418Z",
  "updatedAt": "2026-10-01T08:30:12.418Z"
}

Template

Attribuutit

KenttäTyyppiKuvaus
idstringbuiltin:<slug> or the id of a template saved by you.
kindstring

Yksi arvoista: builtin, user

namestring
descriptionstringvoi olla null
taskCountinteger
durationDaysintegerWorking days from start to finish.
ObjektitTemplate
{
  "id": "builtin:website-launch",
  "kind": "builtin",
  "name": "Website launch",
  "description": "From discovery to go-live: design, content, development, testing and launch.",
  "taskCount": 12,
  "durationDays": 43
}

Baseline

Attribuutit

KenttäTyyppiKuvaus
idstring (uuid)
namestring
indexintegervoi olla nullNumbered MS Project baseline (1-10); null for the main baseline and the ones you name.
capturedAtstring (date-time)
capturedBystring (uuid)voi olla null
taskCountinteger
ObjektitBaseline
{
  "id": "b5d68d05-0640-48f9-8eeb-ed7804f4a116",
  "name": "Plan v1",
  "index": null,
  "capturedAt": "2026-10-01T08:30:12.418Z",
  "capturedBy": "b1666432-132a-4ea9-b1ae-76ea69e226c5",
  "taskCount": 12
}

List projects

GET/api/projects

Avain lukuoikeudella

All projects visible to the user (not paginated). ?archived=1 includes archived ones.

Kyselyparametrit

KenttäTyyppiKuvaus
archivedstring

Yksi arvoista: 1

Palauttaa

200 OK Projects

KenttäTyyppiKuvaus
projectsarray of Project
Pyyntö
curl https://planitude.app/api/projects \
  -H "Authorization: Bearer $PLANITUDE_API_KEY"
Vastaus200 OK
{
  "projects": [
    {
      "id": "40be00e0-7e34-4f7a-864b-5cc986f575b8",
      "workspaceId": "824650d2-d0b3-4cac-8df8-5743ae9ff65a",
      "key": "WHX",
      "keyLocked": false,
      "name": "Warehouse expansion",
      "description": null,
      "startDate": "2026-10-05",
      "calendarId": null,
      "currency": "EUR",
      "scheduleFrom": "forward",
      "deadline": null,
      "color": null,
      "settings": {},
      "archivedAt": null,
      "createdBy": "b1666432-132a-4ea9-b1ae-76ea69e226c5",
      "createdAt": "2026-10-01T08:30:12.418Z",
      "updatedAt": "2026-10-01T08:30:12.418Z",
      "workspaceName": "Acme Construction",
      "role": "owner",
      "taskCount": 12,
      "finishAt": "2026-10-07T15:00:00.000Z"
    }
  ]
}

Create a project

POST/api/projects

Avain kirjoitusoikeudella

Pyynnön runko

KenttäTyyppiKuvaus
name
pakollinen
string
workspaceIdstring (uuid)Defaults to your personal workspace.
keystring2-5 letters/digits, starts with a letter. Derived from the name if omitted.
descriptionstringvoi olla null
startDatestring (date)
deadlinestring (date)voi olla null
currencystring
scheduleFromstring

Yksi arvoista: forward, backward

colorstringvoi olla null

Palauttaa

201 Created Created

KenttäTyyppiKuvaus
projectProject
Pyyntö
curl -X POST https://planitude.app/api/projects \
  -H "Authorization: Bearer $PLANITUDE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name":"Warehouse expansion","startDate":"2026-10-05","currency":"EUR"}'
Vastaus201 Created
{
  "project": {
    "id": "40be00e0-7e34-4f7a-864b-5cc986f575b8",
    "workspaceId": "824650d2-d0b3-4cac-8df8-5743ae9ff65a",
    "key": "WHX",
    "keyLocked": false,
    "name": "Warehouse expansion",
    "description": null,
    "startDate": "2026-10-05",
    "calendarId": null,
    "currency": "EUR",
    "scheduleFrom": "forward",
    "deadline": null,
    "color": null,
    "settings": {},
    "archivedAt": null,
    "createdBy": "b1666432-132a-4ea9-b1ae-76ea69e226c5",
    "createdAt": "2026-10-01T08:30:12.418Z",
    "updatedAt": "2026-10-01T08:30:12.418Z"
  }
}

Create a project from a template

POST/api/projects/from-template

Avain kirjoitusoikeudella

Pyynnön runko

KenttäTyyppiKuvaus
templateId
pakollinen
stringId from GET /api/templates.
startDate
pakollinen
string (date)
namestring
keystring
localestringLanguage of the template texts (en, it, es, fr, de, pt, nl, pl, ja, zh, sv, da, no, fi, cs, ro, uk, tr, ar, he, hi, id, vi, ko).
tzstringIANA time zone of the project calendar.
workspaceIdstring (uuid)

Palauttaa

201 Created Created

KenttäTyyppiKuvaus
projectProject
taskCountinteger
conflictsarray of Conflict
Pyyntö
curl -X POST https://planitude.app/api/projects/from-template \
  -H "Authorization: Bearer $PLANITUDE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "templateId": "builtin:website-launch",
  "startDate": "2026-10-05",
  "name": "Website relaunch",
  "locale": "en"
}'
Vastaus201 Created
{
  "project": {
    "id": "40be00e0-7e34-4f7a-864b-5cc986f575b8",
    "workspaceId": "824650d2-d0b3-4cac-8df8-5743ae9ff65a",
    "key": "WHX",
    "keyLocked": false,
    "name": "Warehouse expansion",
    "description": null,
    "startDate": "2026-10-05",
    "calendarId": null,
    "currency": "EUR",
    "scheduleFrom": "forward",
    "deadline": null,
    "color": null,
    "settings": {},
    "archivedAt": null,
    "createdBy": "b1666432-132a-4ea9-b1ae-76ea69e226c5",
    "createdAt": "2026-10-01T08:30:12.418Z",
    "updatedAt": "2026-10-01T08:30:12.418Z"
  },
  "taskCount": 12,
  "conflicts": []
}

List project templates

GET/api/templates

Avain lukuoikeudella

Kyselyparametrit

KenttäTyyppiKuvaus
localestring

Palauttaa

200 OK Templates

KenttäTyyppiKuvaus
templatesarray of Template
Pyyntö
curl https://planitude.app/api/templates \
  -H "Authorization: Bearer $PLANITUDE_API_KEY"
Vastaus200 OK
{
  "templates": [
    {
      "id": "builtin:website-launch",
      "kind": "builtin",
      "name": "Website launch",
      "description": "From discovery to go-live: design, content, development, testing and launch.",
      "taskCount": 12,
      "durationDays": 43
    }
  ]
}

Full project (tasks tree, dependencies, resources, members, baselines)

GET/api/projects/{projectId}

Avain lukuoikeudella

Polun parametrit

KenttäTyyppiKuvaus
projectId
pakollinen
string (uuid)Project id.

Palauttaa

200 OK Project

KenttäTyyppiKuvaus
projectProject
tasksarray of Task
dependenciesarray of Dependency
Pyyntö
curl https://planitude.app/api/projects/40be00e0-7e34-4f7a-864b-5cc986f575b8 \
  -H "Authorization: Bearer $PLANITUDE_API_KEY"
Vastaus200 OK
{
  "project": {
    "id": "40be00e0-7e34-4f7a-864b-5cc986f575b8",
    "workspaceId": "824650d2-d0b3-4cac-8df8-5743ae9ff65a",
    "key": "WHX",
    "keyLocked": false,
    "name": "Warehouse expansion",
    "description": null,
    "startDate": "2026-10-05",
    "calendarId": null,
    "currency": "EUR",
    "scheduleFrom": "forward",
    "deadline": null,
    "color": null,
    "settings": {},
    "archivedAt": null,
    "createdBy": "b1666432-132a-4ea9-b1ae-76ea69e226c5",
    "createdAt": "2026-10-01T08:30:12.418Z",
    "updatedAt": "2026-10-01T08:30:12.418Z"
  },
  "tasks": [
    {
      "id": "4dbd104a-00cd-4035-8955-255f52ea586a",
      "number": 1,
      "key": "WHX-1",
      "parentId": null,
      "sortKey": "i",
      "name": "Foundations",
      "type": "task",
      "durationMin": 1440,
      "workMin": 0,
      "progressPct": 0,
      "constraintKind": "asap",
      "constraintDate": null,
      "deadline": null,
      "calendarId": null,
      "costFixed": 0,
      "notes": null,
      "color": null,
      "wbs": null,
      "externalId": "crm-4711",
      "startAt": "2026-10-05T06:00:00.000Z",
      "finishAt": "2026-10-07T15:00:00.000Z",
      "isCritical": true,
      "totalFloatMin": 0,
      "earlyStartAt": "2026-10-05T06:00:00.000Z",
      "lateFinishAt": "2026-10-07T15:00:00.000Z",
      "actualStartAt": null,
      "actualFinishAt": null,
      "actualDurationMin": null,
      "remainingDurationMin": null,
      "manuallyScheduled": false,
      "levelingDelayMin": 0,
      "taskType": "fixed_units",
      "effortDriven": false,
      "durationOptimisticMin": null,
      "durationPessimisticMin": null
    }
  ],
  "dependencies": [
    {
      "id": "9ba5faf8-923d-4ecc-86f0-f245c5d179db",
      "predecessorId": "4dbd104a-00cd-4035-8955-255f52ea586a",
      "successorId": "a22fd799-c4dc-4869-a466-0dd6e96f71ce",
      "type": "FS",
      "lagMin": 0
    }
  ]
}

Update a project

PATCH/api/projects/{projectId}

Avain kirjoitusoikeudella

Polun parametrit

KenttäTyyppiKuvaus
projectId
pakollinen
string (uuid)Project id.

Pyynnön runko

KenttäTyyppiKuvaus
namestring
descriptionstringvoi olla null
startDatestring (date)
deadlinestring (date)voi olla null
currencystring
scheduleFromstring

Yksi arvoista: forward, backward

colorstringvoi olla null
archivedboolean

Palauttaa

200 OK Updated

KenttäTyyppiKuvaus
projectProject
conflictsarray of Conflict
rescheduledbooleanThe schedule was recalculated (start date, calendar or direction changed).
Pyyntö
curl -X PATCH https://planitude.app/api/projects/40be00e0-7e34-4f7a-864b-5cc986f575b8 \
  -H "Authorization: Bearer $PLANITUDE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"deadline":"2026-12-18"}'
Vastaus200 OK
{
  "project": {
    "id": "40be00e0-7e34-4f7a-864b-5cc986f575b8",
    "workspaceId": "824650d2-d0b3-4cac-8df8-5743ae9ff65a",
    "key": "WHX",
    "keyLocked": false,
    "name": "Warehouse expansion",
    "description": null,
    "startDate": "2026-10-05",
    "calendarId": null,
    "currency": "EUR",
    "scheduleFrom": "forward",
    "deadline": null,
    "color": null,
    "settings": {},
    "archivedAt": null,
    "createdBy": "b1666432-132a-4ea9-b1ae-76ea69e226c5",
    "createdAt": "2026-10-01T08:30:12.418Z",
    "updatedAt": "2026-10-01T08:30:12.418Z"
  },
  "conflicts": [],
  "rescheduled": false
}

List baselines

GET/api/projects/{projectId}/baseline

Avain lukuoikeudella

Polun parametrit

KenttäTyyppiKuvaus
projectId
pakollinen
string (uuid)Project id.

Palauttaa

200 OK Baselines

KenttäTyyppiKuvaus
baselinesarray of Baseline
Pyyntö
curl https://planitude.app/api/projects/40be00e0-7e34-4f7a-864b-5cc986f575b8/baseline \
  -H "Authorization: Bearer $PLANITUDE_API_KEY"
Vastaus200 OK
{
  "baselines": [
    {
      "id": "b5d68d05-0640-48f9-8eeb-ed7804f4a116",
      "name": "Plan v1",
      "index": null,
      "capturedAt": "2026-10-01T08:30:12.418Z",
      "capturedBy": "b1666432-132a-4ea9-b1ae-76ea69e226c5",
      "taskCount": 12
    }
  ]
}

Save a baseline

POST/api/projects/{projectId}/baseline

Avain kirjoitusoikeudella

Polun parametrit

KenttäTyyppiKuvaus
projectId
pakollinen
string (uuid)Project id.

Pyynnön runko

KenttäTyyppiKuvaus
namestring

Palauttaa

201 Created Saved

KenttäTyyppiKuvaus
baselineBaseline
Pyyntö
curl -X POST https://planitude.app/api/projects/40be00e0-7e34-4f7a-864b-5cc986f575b8/baseline \
  -H "Authorization: Bearer $PLANITUDE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name":"Plan v1"}'
Vastaus201 Created
{
  "baseline": {
    "id": "b5d68d05-0640-48f9-8eeb-ed7804f4a116",
    "name": "Plan v1",
    "index": null,
    "capturedAt": "2026-10-01T08:30:12.418Z",
    "capturedBy": "b1666432-132a-4ea9-b1ae-76ea69e226c5",
    "taskCount": 12
  }
}

API-viite

Tasks

Tasks, search by external id, comments.

Task

Task representation of GET /tasks and webhook payloads: the stored task (without sortKey) plus project, assignees and link.

Attribuutit

KenttäTyyppiKuvaus
idstring (uuid)
numberintegerSequential number in the project, never reused.
keystringHuman key, e.g. CRON-12.
parentIdstring (uuid)voi olla null
namestring
typestring

Yksi arvoista: summary, task, milestone

durationMinintegerDuration in working minutes (8h day = 480).
workMininteger
progressPctnumber
constraintKindstring

Yksi arvoista: asap, alap, start_no_earlier_than, start_no_later_than, finish_no_earlier_than, finish_no_later_than, must_start_on, must_finish_on

constraintDatestring (date-time)voi olla null
deadlinestring (date-time)voi olla null
calendarIdstring (uuid)voi olla null
costFixednumber
notesstringvoi olla null
colorstringvoi olla null
wbsstringvoi olla null
externalIdstringvoi olla nullYour identifier for this task in another system. Searchable with GET /tasks?externalId=.
startAtstring (date-time)voi olla nullComputed start.
finishAtstring (date-time)voi olla nullComputed finish.
isCriticalbooleanOn the critical path.
totalFloatMinintegervoi olla nullTotal float (slack) in working minutes.
earlyStartAtstring (date-time)voi olla null
lateFinishAtstring (date-time)voi olla null
actualStartAtstring (date-time)voi olla null
actualFinishAtstring (date-time)voi olla null
actualDurationMinintegervoi olla null
remainingDurationMinintegervoi olla null
manuallyScheduledboolean
levelingDelayMininteger
taskTypestring

Yksi arvoista: fixed_units, fixed_duration, fixed_work, fixed_duration_and_units

effortDrivenboolean
durationOptimisticMinintegervoi olla null
durationPessimisticMinintegervoi olla null
projectIdstring (uuid)
completedbooleanprogressPct = 100.
assigneesarray of Assignee
urlstring (uri)Page of the task in the web app.
ObjektitTask
{
  "id": "4dbd104a-00cd-4035-8955-255f52ea586a",
  "number": 1,
  "key": "WHX-1",
  "parentId": null,
  "name": "Foundations",
  "type": "task",
  "durationMin": 1440,
  "workMin": 0,
  "progressPct": 0,
  "constraintKind": "asap",
  "constraintDate": null,
  "deadline": null,
  "calendarId": null,
  "costFixed": 0,
  "notes": null,
  "color": null,
  "wbs": null,
  "externalId": "crm-4711",
  "startAt": "2026-10-05T06:00:00.000Z",
  "finishAt": "2026-10-07T15:00:00.000Z",
  "isCritical": true,
  "totalFloatMin": 0,
  "earlyStartAt": "2026-10-05T06:00:00.000Z",
  "lateFinishAt": "2026-10-07T15:00:00.000Z",
  "actualStartAt": null,
  "actualFinishAt": null,
  "actualDurationMin": null,
  "remainingDurationMin": null,
  "manuallyScheduled": false,
  "levelingDelayMin": 0,
  "taskType": "fixed_units",
  "effortDriven": false,
  "durationOptimisticMin": null,
  "durationPessimisticMin": null,
  "projectId": "40be00e0-7e34-4f7a-864b-5cc986f575b8",
  "completed": false,
  "assignees": [
    {
      "resourceId": "0c6a8f52-3d7e-4b19-9a4e-6f1d2c8b7e30",
      "userId": "b1666432-132a-4ea9-b1ae-76ea69e226c5",
      "name": "Anna Rossi",
      "unitsPct": 100
    }
  ],
  "url": "https://planitude.app/app/t/WHX-1"
}

WriteResult

Attribuutit

KenttäTyyppiKuvaus
tasksarray of TaskCreated/updated tasks plus the ones the recalculation moved.
deletedTaskIdsarray of string
dependenciesarray of Dependency
deletedDependencyIdsarray of string
conflictsarray of Conflict
projectStartAtstring (date-time)
projectFinishAtstring (date-time)
statsobject
Näytä kentät: stats
KenttäTyyppiKuvaus
taskCountinteger
recomputedCountintegerTasks the scheduling engine recalculated.
savedCountintegerTasks whose stored values changed.
durationMsinteger
ObjektitWriteResult
{
  "tasks": [
    {
      "id": "4dbd104a-00cd-4035-8955-255f52ea586a",
      "number": 1,
      "key": "WHX-1",
      "parentId": null,
      "sortKey": "i",
      "name": "Foundations",
      "type": "task",
      "durationMin": 1440,
      "workMin": 0,
      "progressPct": 0,
      "constraintKind": "asap",
      "constraintDate": null,
      "deadline": null,
      "calendarId": null,
      "costFixed": 0,
      "notes": null,
      "color": null,
      "wbs": null,
      "externalId": "crm-4711",
      "startAt": "2026-10-05T06:00:00.000Z",
      "finishAt": "2026-10-07T15:00:00.000Z",
      "isCritical": true,
      "totalFloatMin": 0,
      "earlyStartAt": "2026-10-05T06:00:00.000Z",
      "lateFinishAt": "2026-10-07T15:00:00.000Z",
      "actualStartAt": null,
      "actualFinishAt": null,
      "actualDurationMin": null,
      "remainingDurationMin": null,
      "manuallyScheduled": false,
      "levelingDelayMin": 0,
      "taskType": "fixed_units",
      "effortDriven": false,
      "durationOptimisticMin": null,
      "durationPessimisticMin": null
    }
  ],
  "deletedTaskIds": [],
  "dependencies": [
    {
      "id": "9ba5faf8-923d-4ecc-86f0-f245c5d179db",
      "predecessorId": "4dbd104a-00cd-4035-8955-255f52ea586a",
      "successorId": "a22fd799-c4dc-4869-a466-0dd6e96f71ce",
      "type": "FS",
      "lagMin": 0
    }
  ],
  "deletedDependencyIds": [],
  "conflicts": [],
  "projectStartAt": "2026-10-05T06:00:00.000Z",
  "projectFinishAt": "2026-10-07T15:00:00.000Z",
  "stats": {
    "taskCount": 12,
    "recomputedCount": 3,
    "savedCount": 2,
    "durationMs": 39
  }
}

Comment

Attribuutit

KenttäTyyppiKuvaus
idstring (uuid)
taskIdstring (uuid)
userIdstring (uuid)
authorNamestring
authorAvatarUrlstringvoi olla null
bodystring
mentionsarray of string
createdAtstring (date-time)
editedAtstring (date-time)voi olla null
ObjektitComment
{
  "id": "0fc2dec5-a409-47c9-9c6e-0663e8f8bcf3",
  "taskId": "4dbd104a-00cd-4035-8955-255f52ea586a",
  "userId": "b1666432-132a-4ea9-b1ae-76ea69e226c5",
  "authorName": "Anna Rossi",
  "authorAvatarUrl": null,
  "body": "Concrete delivered, we can start the walls.",
  "mentions": [],
  "createdAt": "2026-10-01T08:30:12.418Z",
  "editedAt": null
}

List or search tasks (paginated)

GET/api/projects/{projectId}/tasks

Avain lukuoikeudella

Polun parametrit

KenttäTyyppiKuvaus
projectId
pakollinen
string (uuid)Project id.

Kyselyparametrit

KenttäTyyppiKuvaus
limitinteger1-500.

Oletus: 100

cursorstringnextCursor of the previous page.
sortstring-number = newest first (polling triggers). -updatedAt returns the first page only.

Yksi arvoista: number, -number, -updatedAt

Oletus: number

externalIdstringExact match on externalId.
qstringName contains (case-insensitive).
updatedSincestring (date-time)
completedstring

Yksi arvoista: true, false

Palauttaa

200 OK A page of tasks

KenttäTyyppiKuvaus
tasksarray of Task
nextCursorstringvoi olla null
Pyyntö
curl "https://planitude.app/api/projects/40be00e0-7e34-4f7a-864b-5cc986f575b8/tasks?externalId=crm-4711" \
  -H "Authorization: Bearer $PLANITUDE_API_KEY"
Vastaus200 OK
{
  "tasks": [
    {
      "id": "4dbd104a-00cd-4035-8955-255f52ea586a",
      "number": 1,
      "key": "WHX-1",
      "parentId": null,
      "name": "Foundations",
      "type": "task",
      "durationMin": 1440,
      "workMin": 0,
      "progressPct": 0,
      "constraintKind": "asap",
      "constraintDate": null,
      "deadline": null,
      "calendarId": null,
      "costFixed": 0,
      "notes": null,
      "color": null,
      "wbs": null,
      "externalId": "crm-4711",
      "startAt": "2026-10-05T06:00:00.000Z",
      "finishAt": "2026-10-07T15:00:00.000Z",
      "isCritical": true,
      "totalFloatMin": 0,
      "earlyStartAt": "2026-10-05T06:00:00.000Z",
      "lateFinishAt": "2026-10-07T15:00:00.000Z",
      "actualStartAt": null,
      "actualFinishAt": null,
      "actualDurationMin": null,
      "remainingDurationMin": null,
      "manuallyScheduled": false,
      "levelingDelayMin": 0,
      "taskType": "fixed_units",
      "effortDriven": false,
      "durationOptimisticMin": null,
      "durationPessimisticMin": null,
      "projectId": "40be00e0-7e34-4f7a-864b-5cc986f575b8",
      "completed": false,
      "assignees": [
        {
          "resourceId": "0c6a8f52-3d7e-4b19-9a4e-6f1d2c8b7e30",
          "userId": "b1666432-132a-4ea9-b1ae-76ea69e226c5",
          "name": "Anna Rossi",
          "unitsPct": 100
        }
      ],
      "url": "https://planitude.app/app/t/WHX-1"
    }
  ],
  "nextCursor": null
}

Create a task, or apply a change set

POST/api/projects/{projectId}/tasks

Avain kirjoitusoikeudella

Send a TaskCreate to create one task (201), or a ChangeSet to apply several changes in one transaction (200). Dates are recalculated by the scheduling engine.

Polun parametrit

KenttäTyyppiKuvaus
projectId
pakollinen
string (uuid)Project id.

Pyynnön runko

TaskCreate

KenttäTyyppiKuvaus
name
pakollinen
string
parentIdstring (uuid)voi olla nullParent (summary) task; null = top level.
afterTaskIdstring (uuid)voi olla nullInsert after this sibling.
beforeTaskIdstring (uuid)voi olla nullInsert before this sibling.
typestring

Yksi arvoista: summary, task, milestone

durationMinintegerDuration in working minutes (8h day = 480).
workMininteger
progressPctnumber
constraintKindstring

Yksi arvoista: asap, alap, start_no_earlier_than, start_no_later_than, finish_no_earlier_than, finish_no_later_than, must_start_on, must_finish_on

constraintDatestring (date-time)voi olla null
deadlinestring (date-time)voi olla null
calendarIdstring (uuid)voi olla null
costFixednumber
notesstringvoi olla null
colorstringvoi olla null
wbsstringvoi olla null
externalIdstringvoi olla nullYour identifier for this task in another system. Searchable with GET /tasks?externalId=.

tai ChangeSet

KenttäTyyppiKuvaus
createTasksarray of TaskCreate
updateTasksarray of any
createDependenciesarray of DependencyCreate
deleteDependencyIdsarray of string
fullRescheduleboolean

Palauttaa

201 Created Task created

KenttäTyyppiKuvaus
tasksarray of TaskCreated/updated tasks plus the ones the recalculation moved.
deletedTaskIdsarray of string
dependenciesarray of Dependency
deletedDependencyIdsarray of string
conflictsarray of Conflict
projectStartAtstring (date-time)
projectFinishAtstring (date-time)
statsobject
Näytä kentät: stats
KenttäTyyppiKuvaus
taskCountinteger
recomputedCountintegerTasks the scheduling engine recalculated.
savedCountintegerTasks whose stored values changed.
durationMsinteger
Pyyntö
curl -X POST https://planitude.app/api/projects/40be00e0-7e34-4f7a-864b-5cc986f575b8/tasks \
  -H "Authorization: Bearer $PLANITUDE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name":"Foundations","durationMin":1440,"externalId":"crm-4711"}'
Vastaus201 Created
{
  "tasks": [
    {
      "id": "4dbd104a-00cd-4035-8955-255f52ea586a",
      "number": 1,
      "key": "WHX-1",
      "parentId": null,
      "sortKey": "i",
      "name": "Foundations",
      "type": "task",
      "durationMin": 1440,
      "workMin": 0,
      "progressPct": 0,
      "constraintKind": "asap",
      "constraintDate": null,
      "deadline": null,
      "calendarId": null,
      "costFixed": 0,
      "notes": null,
      "color": null,
      "wbs": null,
      "externalId": "crm-4711",
      "startAt": "2026-10-05T06:00:00.000Z",
      "finishAt": "2026-10-07T15:00:00.000Z",
      "isCritical": true,
      "totalFloatMin": 0,
      "earlyStartAt": "2026-10-05T06:00:00.000Z",
      "lateFinishAt": "2026-10-07T15:00:00.000Z",
      "actualStartAt": null,
      "actualFinishAt": null,
      "actualDurationMin": null,
      "remainingDurationMin": null,
      "manuallyScheduled": false,
      "levelingDelayMin": 0,
      "taskType": "fixed_units",
      "effortDriven": false,
      "durationOptimisticMin": null,
      "durationPessimisticMin": null
    }
  ],
  "deletedTaskIds": [],
  "dependencies": [
    {
      "id": "9ba5faf8-923d-4ecc-86f0-f245c5d179db",
      "predecessorId": "4dbd104a-00cd-4035-8955-255f52ea586a",
      "successorId": "a22fd799-c4dc-4869-a466-0dd6e96f71ce",
      "type": "FS",
      "lagMin": 0
    }
  ],
  "deletedDependencyIds": [],
  "conflicts": [],
  "projectStartAt": "2026-10-05T06:00:00.000Z",
  "projectFinishAt": "2026-10-07T15:00:00.000Z",
  "stats": {
    "taskCount": 12,
    "recomputedCount": 3,
    "savedCount": 2,
    "durationMs": 39
  }
}

Get a task

GET/api/projects/{projectId}/tasks/{taskId}

Avain lukuoikeudella

Polun parametrit

KenttäTyyppiKuvaus
projectId
pakollinen
string (uuid)Project id.
taskId
pakollinen
string (uuid)Task id.

Palauttaa

200 OK The task

KenttäTyyppiKuvaus
taskTask
Pyyntö
curl https://planitude.app/api/projects/40be00e0-7e34-4f7a-864b-5cc986f575b8/tasks/4dbd104a-00cd-4035-8955-255f52ea586a \
  -H "Authorization: Bearer $PLANITUDE_API_KEY"
Vastaus200 OK
{
  "task": {
    "id": "4dbd104a-00cd-4035-8955-255f52ea586a",
    "number": 1,
    "key": "WHX-1",
    "parentId": null,
    "name": "Foundations",
    "type": "task",
    "durationMin": 1440,
    "workMin": 0,
    "progressPct": 0,
    "constraintKind": "asap",
    "constraintDate": null,
    "deadline": null,
    "calendarId": null,
    "costFixed": 0,
    "notes": null,
    "color": null,
    "wbs": null,
    "externalId": "crm-4711",
    "startAt": "2026-10-05T06:00:00.000Z",
    "finishAt": "2026-10-07T15:00:00.000Z",
    "isCritical": true,
    "totalFloatMin": 0,
    "earlyStartAt": "2026-10-05T06:00:00.000Z",
    "lateFinishAt": "2026-10-07T15:00:00.000Z",
    "actualStartAt": null,
    "actualFinishAt": null,
    "actualDurationMin": null,
    "remainingDurationMin": null,
    "manuallyScheduled": false,
    "levelingDelayMin": 0,
    "taskType": "fixed_units",
    "effortDriven": false,
    "durationOptimisticMin": null,
    "durationPessimisticMin": null,
    "projectId": "40be00e0-7e34-4f7a-864b-5cc986f575b8",
    "completed": false,
    "assignees": [
      {
        "resourceId": "0c6a8f52-3d7e-4b19-9a4e-6f1d2c8b7e30",
        "userId": "b1666432-132a-4ea9-b1ae-76ea69e226c5",
        "name": "Anna Rossi",
        "unitsPct": 100
      }
    ],
    "url": "https://planitude.app/app/t/WHX-1"
  }
}

Update a task

PATCH/api/projects/{projectId}/tasks/{taskId}

Avain kirjoitusoikeudella

Only the fields you send change; null clears a field.

Polun parametrit

KenttäTyyppiKuvaus
projectId
pakollinen
string (uuid)Project id.
taskId
pakollinen
string (uuid)Task id.

Pyynnön runko

KenttäTyyppiKuvaus
namestring
typestring

Yksi arvoista: summary, task, milestone

durationMinintegerDuration in working minutes (8h day = 480).
workMininteger
progressPctnumber
constraintKindstring

Yksi arvoista: asap, alap, start_no_earlier_than, start_no_later_than, finish_no_earlier_than, finish_no_later_than, must_start_on, must_finish_on

constraintDatestring (date-time)voi olla null
deadlinestring (date-time)voi olla null
calendarIdstring (uuid)voi olla null
costFixednumber
notesstringvoi olla null
colorstringvoi olla null
wbsstringvoi olla null
externalIdstringvoi olla nullYour identifier for this task in another system. Searchable with GET /tasks?externalId=.
placementobject
Näytä kentät: placement
KenttäTyyppiKuvaus
parentIdstring (uuid)voi olla nullParent (summary) task; null = top level.
afterTaskIdstring (uuid)voi olla nullInsert after this sibling.
beforeTaskIdstring (uuid)voi olla nullInsert before this sibling.

Palauttaa

200 OK Updated

KenttäTyyppiKuvaus
tasksarray of TaskCreated/updated tasks plus the ones the recalculation moved.
deletedTaskIdsarray of string
dependenciesarray of Dependency
deletedDependencyIdsarray of string
conflictsarray of Conflict
projectStartAtstring (date-time)
projectFinishAtstring (date-time)
statsobject
Näytä kentät: stats
KenttäTyyppiKuvaus
taskCountinteger
recomputedCountintegerTasks the scheduling engine recalculated.
savedCountintegerTasks whose stored values changed.
durationMsinteger
Pyyntö
curl -X PATCH https://planitude.app/api/projects/40be00e0-7e34-4f7a-864b-5cc986f575b8/tasks/4dbd104a-00cd-4035-8955-255f52ea586a \
  -H "Authorization: Bearer $PLANITUDE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"progressPct":100}'
Vastaus200 OK
{
  "tasks": [
    {
      "id": "4dbd104a-00cd-4035-8955-255f52ea586a",
      "number": 1,
      "key": "WHX-1",
      "parentId": null,
      "sortKey": "i",
      "name": "Foundations",
      "type": "task",
      "durationMin": 1440,
      "workMin": 0,
      "progressPct": 0,
      "constraintKind": "asap",
      "constraintDate": null,
      "deadline": null,
      "calendarId": null,
      "costFixed": 0,
      "notes": null,
      "color": null,
      "wbs": null,
      "externalId": "crm-4711",
      "startAt": "2026-10-05T06:00:00.000Z",
      "finishAt": "2026-10-07T15:00:00.000Z",
      "isCritical": true,
      "totalFloatMin": 0,
      "earlyStartAt": "2026-10-05T06:00:00.000Z",
      "lateFinishAt": "2026-10-07T15:00:00.000Z",
      "actualStartAt": null,
      "actualFinishAt": null,
      "actualDurationMin": null,
      "remainingDurationMin": null,
      "manuallyScheduled": false,
      "levelingDelayMin": 0,
      "taskType": "fixed_units",
      "effortDriven": false,
      "durationOptimisticMin": null,
      "durationPessimisticMin": null
    }
  ],
  "deletedTaskIds": [],
  "dependencies": [
    {
      "id": "9ba5faf8-923d-4ecc-86f0-f245c5d179db",
      "predecessorId": "4dbd104a-00cd-4035-8955-255f52ea586a",
      "successorId": "a22fd799-c4dc-4869-a466-0dd6e96f71ce",
      "type": "FS",
      "lagMin": 0
    }
  ],
  "deletedDependencyIds": [],
  "conflicts": [],
  "projectStartAt": "2026-10-05T06:00:00.000Z",
  "projectFinishAt": "2026-10-07T15:00:00.000Z",
  "stats": {
    "taskCount": 12,
    "recomputedCount": 3,
    "savedCount": 2,
    "durationMs": 39
  }
}

Comments of a task

GET/api/projects/{projectId}/tasks/{taskId}/comments

Avain lukuoikeudella

Polun parametrit

KenttäTyyppiKuvaus
projectId
pakollinen
string (uuid)Project id.
taskId
pakollinen
string (uuid)Task id.

Palauttaa

200 OK Comments

KenttäTyyppiKuvaus
commentsarray of Comment
Pyyntö
curl https://planitude.app/api/projects/40be00e0-7e34-4f7a-864b-5cc986f575b8/tasks/4dbd104a-00cd-4035-8955-255f52ea586a/comments \
  -H "Authorization: Bearer $PLANITUDE_API_KEY"
Vastaus200 OK
{
  "comments": [
    {
      "id": "0fc2dec5-a409-47c9-9c6e-0663e8f8bcf3",
      "taskId": "4dbd104a-00cd-4035-8955-255f52ea586a",
      "userId": "b1666432-132a-4ea9-b1ae-76ea69e226c5",
      "authorName": "Anna Rossi",
      "authorAvatarUrl": null,
      "body": "Concrete delivered, we can start the walls.",
      "mentions": [],
      "createdAt": "2026-10-01T08:30:12.418Z",
      "editedAt": null
    }
  ]
}

Comment on a task

POST/api/projects/{projectId}/tasks/{taskId}/comments

Avain kirjoitusoikeudella

Polun parametrit

KenttäTyyppiKuvaus
projectId
pakollinen
string (uuid)Project id.
taskId
pakollinen
string (uuid)Task id.

Pyynnön runko

KenttäTyyppiKuvaus
body
pakollinen
stringPlain text.
mentionsarray of stringUser ids to notify.

Palauttaa

201 Created Created

KenttäTyyppiKuvaus
commentComment
Pyyntö
curl -X POST https://planitude.app/api/projects/40be00e0-7e34-4f7a-864b-5cc986f575b8/tasks/4dbd104a-00cd-4035-8955-255f52ea586a/comments \
  -H "Authorization: Bearer $PLANITUDE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"body":"Concrete delivered, we can start the walls."}'
Vastaus201 Created
{
  "comment": {
    "id": "0fc2dec5-a409-47c9-9c6e-0663e8f8bcf3",
    "taskId": "4dbd104a-00cd-4035-8955-255f52ea586a",
    "userId": "b1666432-132a-4ea9-b1ae-76ea69e226c5",
    "authorName": "Anna Rossi",
    "authorAvatarUrl": null,
    "body": "Concrete delivered, we can start the walls.",
    "mentions": [],
    "createdAt": "2026-10-01T08:30:12.418Z",
    "editedAt": null
  }
}

API-viite

Dependencies

Links between tasks (FS, SS, FF, SF, with lag).

Dependency

Attribuutit

KenttäTyyppiKuvaus
idstring (uuid)
predecessorIdstring (uuid)
successorIdstring (uuid)
typestring

Yksi arvoista: FS, SS, FF, SF

lagMinintegerWorking minutes; negative = lead.
ObjektitDependency
{
  "id": "9ba5faf8-923d-4ecc-86f0-f245c5d179db",
  "predecessorId": "4dbd104a-00cd-4035-8955-255f52ea586a",
  "successorId": "a22fd799-c4dc-4869-a466-0dd6e96f71ce",
  "type": "FS",
  "lagMin": 0
}

List dependencies

GET/api/projects/{projectId}/dependencies

Avain lukuoikeudella

Polun parametrit

KenttäTyyppiKuvaus
projectId
pakollinen
string (uuid)Project id.

Palauttaa

200 OK Dependencies

KenttäTyyppiKuvaus
dependenciesarray of Dependency
Pyyntö
curl https://planitude.app/api/projects/40be00e0-7e34-4f7a-864b-5cc986f575b8/dependencies \
  -H "Authorization: Bearer $PLANITUDE_API_KEY"
Vastaus200 OK
{
  "dependencies": [
    {
      "id": "9ba5faf8-923d-4ecc-86f0-f245c5d179db",
      "predecessorId": "4dbd104a-00cd-4035-8955-255f52ea586a",
      "successorId": "a22fd799-c4dc-4869-a466-0dd6e96f71ce",
      "type": "FS",
      "lagMin": 0
    }
  ]
}

Create (or update) a dependency

POST/api/projects/{projectId}/dependencies

Avain kirjoitusoikeudella

A dependency that would close a cycle is refused with 409 dependency_cycle.

Polun parametrit

KenttäTyyppiKuvaus
projectId
pakollinen
string (uuid)Project id.

Pyynnön runko

DependencyCreate

KenttäTyyppiKuvaus
predecessorId
pakollinen
string (uuid)
successorId
pakollinen
string (uuid)
typestring

Yksi arvoista: FS, SS, FF, SF

Oletus: FS

lagMininteger

Oletus: 0

tai dependencies

KenttäTyyppiKuvaus
dependencies
pakollinen
array of DependencyCreate

Palauttaa

201 Created Created

KenttäTyyppiKuvaus
tasksarray of TaskCreated/updated tasks plus the ones the recalculation moved.
deletedTaskIdsarray of string
dependenciesarray of Dependency
deletedDependencyIdsarray of string
conflictsarray of Conflict
projectStartAtstring (date-time)
projectFinishAtstring (date-time)
statsobject
Näytä kentät: stats
KenttäTyyppiKuvaus
taskCountinteger
recomputedCountintegerTasks the scheduling engine recalculated.
savedCountintegerTasks whose stored values changed.
durationMsinteger
Pyyntö
curl -X POST https://planitude.app/api/projects/40be00e0-7e34-4f7a-864b-5cc986f575b8/dependencies \
  -H "Authorization: Bearer $PLANITUDE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "predecessorId": "4dbd104a-00cd-4035-8955-255f52ea586a",
  "successorId": "a22fd799-c4dc-4869-a466-0dd6e96f71ce",
  "type": "FS",
  "lagMin": 0
}'
Vastaus201 Created
{
  "tasks": [
    {
      "id": "4dbd104a-00cd-4035-8955-255f52ea586a",
      "number": 1,
      "key": "WHX-1",
      "parentId": null,
      "sortKey": "i",
      "name": "Foundations",
      "type": "task",
      "durationMin": 1440,
      "workMin": 0,
      "progressPct": 0,
      "constraintKind": "asap",
      "constraintDate": null,
      "deadline": null,
      "calendarId": null,
      "costFixed": 0,
      "notes": null,
      "color": null,
      "wbs": null,
      "externalId": "crm-4711",
      "startAt": "2026-10-05T06:00:00.000Z",
      "finishAt": "2026-10-07T15:00:00.000Z",
      "isCritical": true,
      "totalFloatMin": 0,
      "earlyStartAt": "2026-10-05T06:00:00.000Z",
      "lateFinishAt": "2026-10-07T15:00:00.000Z",
      "actualStartAt": null,
      "actualFinishAt": null,
      "actualDurationMin": null,
      "remainingDurationMin": null,
      "manuallyScheduled": false,
      "levelingDelayMin": 0,
      "taskType": "fixed_units",
      "effortDriven": false,
      "durationOptimisticMin": null,
      "durationPessimisticMin": null
    }
  ],
  "deletedTaskIds": [],
  "dependencies": [
    {
      "id": "9ba5faf8-923d-4ecc-86f0-f245c5d179db",
      "predecessorId": "4dbd104a-00cd-4035-8955-255f52ea586a",
      "successorId": "a22fd799-c4dc-4869-a466-0dd6e96f71ce",
      "type": "FS",
      "lagMin": 0
    }
  ],
  "deletedDependencyIds": [],
  "conflicts": [],
  "projectStartAt": "2026-10-05T06:00:00.000Z",
  "projectFinishAt": "2026-10-07T15:00:00.000Z",
  "stats": {
    "taskCount": 12,
    "recomputedCount": 3,
    "savedCount": 2,
    "durationMs": 39
  }
}

Remove a dependency

DEL/api/projects/{projectId}/dependencies/{dependencyId}

Avain kirjoitusoikeudella

Polun parametrit

KenttäTyyppiKuvaus
projectId
pakollinen
string (uuid)Project id.
dependencyId
pakollinen
string (uuid)

Palauttaa

200 OK Removed

KenttäTyyppiKuvaus
tasksarray of TaskCreated/updated tasks plus the ones the recalculation moved.
deletedTaskIdsarray of string
dependenciesarray of Dependency
deletedDependencyIdsarray of string
conflictsarray of Conflict
projectStartAtstring (date-time)
projectFinishAtstring (date-time)
statsobject
Näytä kentät: stats
KenttäTyyppiKuvaus
taskCountinteger
recomputedCountintegerTasks the scheduling engine recalculated.
savedCountintegerTasks whose stored values changed.
durationMsinteger
Pyyntö
curl -X DELETE https://planitude.app/api/projects/40be00e0-7e34-4f7a-864b-5cc986f575b8/dependencies/9ba5faf8-923d-4ecc-86f0-f245c5d179db \
  -H "Authorization: Bearer $PLANITUDE_API_KEY"
Vastaus200 OK
{
  "tasks": [
    {
      "id": "4dbd104a-00cd-4035-8955-255f52ea586a",
      "number": 1,
      "key": "WHX-1",
      "parentId": null,
      "sortKey": "i",
      "name": "Foundations",
      "type": "task",
      "durationMin": 1440,
      "workMin": 0,
      "progressPct": 0,
      "constraintKind": "asap",
      "constraintDate": null,
      "deadline": null,
      "calendarId": null,
      "costFixed": 0,
      "notes": null,
      "color": null,
      "wbs": null,
      "externalId": "crm-4711",
      "startAt": "2026-10-05T06:00:00.000Z",
      "finishAt": "2026-10-07T15:00:00.000Z",
      "isCritical": true,
      "totalFloatMin": 0,
      "earlyStartAt": "2026-10-05T06:00:00.000Z",
      "lateFinishAt": "2026-10-07T15:00:00.000Z",
      "actualStartAt": null,
      "actualFinishAt": null,
      "actualDurationMin": null,
      "remainingDurationMin": null,
      "manuallyScheduled": false,
      "levelingDelayMin": 0,
      "taskType": "fixed_units",
      "effortDriven": false,
      "durationOptimisticMin": null,
      "durationPessimisticMin": null
    }
  ],
  "deletedTaskIds": [],
  "dependencies": [
    {
      "id": "9ba5faf8-923d-4ecc-86f0-f245c5d179db",
      "predecessorId": "4dbd104a-00cd-4035-8955-255f52ea586a",
      "successorId": "a22fd799-c4dc-4869-a466-0dd6e96f71ce",
      "type": "FS",
      "lagMin": 0
    }
  ],
  "deletedDependencyIds": [],
  "conflicts": [],
  "projectStartAt": "2026-10-05T06:00:00.000Z",
  "projectFinishAt": "2026-10-07T15:00:00.000Z",
  "stats": {
    "taskCount": 12,
    "recomputedCount": 3,
    "savedCount": 2,
    "durationMs": 39
  }
}

API-viite

People

Project members and task assignees.

Member

Attribuutit

KenttäTyyppiKuvaus
userIdstring (uuid)
namestring
emailstring
rolestringEffective role on the project.

Yksi arvoista: owner, editor, viewer

directRolestringvoi olla nullRole granted on the project itself (null = only through the workspace).

Yksi arvoista: owner, editor, viewer

inheritedbooleanAccess comes from the workspace.
resourceIdstring (uuid)voi olla nullResource used when the person is assigned to tasks.
addedAtstring (date-time)
avatarUrlstringvoi olla null
ObjektitMember
{
  "userId": "b1666432-132a-4ea9-b1ae-76ea69e226c5",
  "name": "Anna Rossi",
  "email": "[email protected]",
  "role": "owner",
  "directRole": null,
  "inherited": false,
  "resourceId": "0c6a8f52-3d7e-4b19-9a4e-6f1d2c8b7e30",
  "addedAt": "2026-10-01T08:30:12.418Z",
  "avatarUrl": null
}

Assignee

Attribuutit

KenttäTyyppiKuvaus
resourceIdstring (uuid)
userIdstring (uuid)voi olla null
namestring
unitsPctinteger
ObjektitAssignee
{
  "resourceId": "0c6a8f52-3d7e-4b19-9a4e-6f1d2c8b7e30",
  "userId": "b1666432-132a-4ea9-b1ae-76ea69e226c5",
  "name": "Anna Rossi",
  "unitsPct": 100
}

Replace the people assigned to a task

PUT/api/projects/{projectId}/tasks/{taskId}/assignees

Avain kirjoitusoikeudella

userIds must be members of the project (GET /members). An empty list removes everyone. Optional resourceIds replaces the people imported from a file (resources without an account) assigned to the task; omit it to leave them as they are.

Polun parametrit

KenttäTyyppiKuvaus
projectId
pakollinen
string (uuid)Project id.
taskId
pakollinen
string (uuid)Task id.

Pyynnön runko

KenttäTyyppiKuvaus
userIds
pakollinen
array of string
resourceIdsarray of string

Palauttaa

200 OK Assignees saved

KenttäTyyppiKuvaus
taskIdstring (uuid)
assignmentsarray of object
Näytä kentät: assignments
KenttäTyyppiKuvaus
idstring (uuid)
taskIdstring (uuid)
resourceIdstring (uuid)
unitsPctinteger
workMininteger
resourcesarray of object
Näytä kentät: resources
KenttäTyyppiKuvaus
idstring (uuid)
userIdstring (uuid)voi olla null
namestring
kindstring

Yksi arvoista: work, material, cost

emailstringvoi olla null
costPerHournumber
costPerUsenumber
capacityPctinteger
calendarIdstring (uuid)voi olla null
colorstringvoi olla null
avatarUrlstringvoi olla null
needsRescheduleboolean
conflictsarray of Conflict
Pyyntö
curl -X PUT https://planitude.app/api/projects/40be00e0-7e34-4f7a-864b-5cc986f575b8/tasks/4dbd104a-00cd-4035-8955-255f52ea586a/assignees \
  -H "Authorization: Bearer $PLANITUDE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"userIds":["b1666432-132a-4ea9-b1ae-76ea69e226c5"]}'
Vastaus200 OK
{
  "taskId": "4dbd104a-00cd-4035-8955-255f52ea586a",
  "assignments": [
    {
      "id": "e62ac96b-e68e-40d3-842e-335e27dfd099",
      "taskId": "4dbd104a-00cd-4035-8955-255f52ea586a",
      "resourceId": "0c6a8f52-3d7e-4b19-9a4e-6f1d2c8b7e30",
      "unitsPct": 100,
      "workMin": 0
    }
  ],
  "resources": [
    {
      "id": "0c6a8f52-3d7e-4b19-9a4e-6f1d2c8b7e30",
      "userId": "b1666432-132a-4ea9-b1ae-76ea69e226c5",
      "name": "Anna Rossi",
      "kind": "builtin",
      "email": "[email protected]",
      "costPerHour": 0,
      "costPerUse": 0,
      "capacityPct": 0,
      "calendarId": null,
      "color": null,
      "avatarUrl": null
    }
  ],
  "needsReschedule": false,
  "conflicts": []
}

People with access to the project (assignable)

GET/api/projects/{projectId}/members

Avain lukuoikeudella

Polun parametrit

KenttäTyyppiKuvaus
projectId
pakollinen
string (uuid)Project id.

Palauttaa

200 OK Members

KenttäTyyppiKuvaus
membersarray of Member
rolestring
Pyyntö
curl https://planitude.app/api/projects/40be00e0-7e34-4f7a-864b-5cc986f575b8/members \
  -H "Authorization: Bearer $PLANITUDE_API_KEY"
Vastaus200 OK
{
  "members": [
    {
      "userId": "b1666432-132a-4ea9-b1ae-76ea69e226c5",
      "name": "Anna Rossi",
      "email": "[email protected]",
      "role": "owner",
      "directRole": null,
      "inherited": false,
      "resourceId": "0c6a8f52-3d7e-4b19-9a4e-6f1d2c8b7e30",
      "addedAt": "2026-10-01T08:30:12.418Z",
      "avatarUrl": null
    }
  ],
  "role": "owner"
}

API-viite

Webhooks

Outgoing webhook subscriptions (REST hooks: subscribe/unsubscribe).

Webhook

Attribuutit

KenttäTyyppiKuvaus
idstring (uuid)
workspaceIdstring (uuid)
workspaceNamestring
projectIdstring (uuid)voi olla nullnull = every project of the workspace.
projectNamestringvoi olla null
namestring
urlstring (uri)
eventsarray of string

Yksi arvoista: project.created, project.updated, project.deleted, task.created, task.updated, task.deleted, task.completed, task.dates_changed, dependency.created, dependency.deleted, baseline.saved, member.invited, member.joined, comment.created

secretPrefixstringFirst characters of the signing secret (not secret).
activeboolean
disabledReasonstringvoi olla null

Yksi arvoista: failures, gone, project_deleted, user

disabledAtstring (date-time)voi olla null
consecutiveFailuresinteger
viaApibooleanCreated with the API (REST hook) rather than from the profile.
createdByobjectvoi olla null
Näytä kentät: createdBy
KenttäTyyppiKuvaus
idstring (uuid)
namestringvoi olla null
createdAtstring (date-time)
updatedAtstring (date-time)
lastDeliveryAtstring (date-time)voi olla null
lastSuccessAtstring (date-time)voi olla null
ObjektitWebhook
{
  "id": "1747ee7f-a395-4d3c-94b0-54b513d71d88",
  "workspaceId": "824650d2-d0b3-4cac-8df8-5743ae9ff65a",
  "workspaceName": "Acme Construction",
  "projectId": "40be00e0-7e34-4f7a-864b-5cc986f575b8",
  "projectName": "Warehouse expansion",
  "name": "Warehouse sync",
  "url": "https://example.com/hooks/planitude",
  "events": [
    "task.created",
    "task.completed"
  ],
  "secretPrefix": "whsec_Fdwl",
  "active": true,
  "disabledReason": null,
  "disabledAt": null,
  "consecutiveFailures": 0,
  "viaApi": true,
  "createdBy": {
    "id": "b1666432-132a-4ea9-b1ae-76ea69e226c5",
    "name": "Anna Rossi"
  },
  "createdAt": "2026-10-01T08:30:12.418Z",
  "updatedAt": "2026-10-01T08:30:12.418Z",
  "lastDeliveryAt": "2026-10-01T08:30:12.418Z",
  "lastSuccessAt": "2026-10-01T08:30:12.418Z"
}

Delivery

Attribuutit

KenttäTyyppiKuvaus
idstring (uuid)
eventIdstring (uuid)
eventTypestring
statusstring

Yksi arvoista: pending, success, failed, cancelled

attemptsinteger
nextAttemptAtstring (date-time)voi olla null
lastAttemptAtstring (date-time)voi olla null
responseStatusintegervoi olla null
responseExcerptstringvoi olla null
errorstringvoi olla null
durationMsintegervoi olla null
manualboolean
createdAtstring (date-time)
ObjektitDelivery
{
  "id": "4b207161-80f9-40bb-bc3f-d8f70315be00",
  "eventId": "6f1c1d1e-2f4b-4d0a-9a77-2a3c5b1e9f10",
  "eventType": "task.completed",
  "status": "success",
  "attempts": 1,
  "nextAttemptAt": null,
  "lastAttemptAt": "2026-10-01T08:30:12.418Z",
  "responseStatus": 200,
  "responseExcerpt": "{\"ok\":true}",
  "error": null,
  "durationMs": 39,
  "manual": false,
  "createdAt": "2026-10-01T08:30:12.418Z"
}

Event

Attribuutit

KenttäTyyppiKuvaus
id
pakollinen
string (uuid)Event id, also in the Planitude-Event-Id header: use it to deduplicate.
type
pakollinen
string

Yksi arvoista: project.created, project.updated, project.deleted, task.created, task.updated, task.deleted, task.completed, task.dates_changed, dependency.created, dependency.deleted, baseline.saved, member.invited, member.joined, comment.created, webhook.ping

apiVersion
pakollinen
string

Yksi arvoista: 2026-10-01

createdAt
pakollinen
string (date-time)
workspaceId
pakollinen
string (uuid)
projectIdstring (uuid)voi olla null
actorobjectvoi olla nullWho made the change (null for system changes).
Näytä kentät: actor
KenttäTyyppiKuvaus
idstring (uuid)
namestringvoi olla null
data
pakollinen
object
ObjektitEvent
{
  "id": "6f1c1d1e-2f4b-4d0a-9a77-2a3c5b1e9f10",
  "type": "project.created",
  "apiVersion": "2026-10-01",
  "createdAt": "2026-10-01T08:30:12.418Z",
  "workspaceId": "824650d2-d0b3-4cac-8df8-5743ae9ff65a",
  "projectId": "40be00e0-7e34-4f7a-864b-5cc986f575b8",
  "actor": {
    "id": "b1666432-132a-4ea9-b1ae-76ea69e226c5",
    "name": "Anna Rossi"
  },
  "data": {}
}

Project (event payload)

Compact project representation used in webhook payloads.

Attribuutit

KenttäTyyppiKuvaus
idstring (uuid)
workspaceIdstring (uuid)
keystring
namestring
descriptionstringvoi olla null
startDatestring (date)
deadlinestring (date)voi olla null
currencystring
scheduleFromstring

Yksi arvoista: forward, backward

colorstringvoi olla null
archivedboolean
createdAtstring (date-time)
updatedAtstring (date-time)
urlstring (uri)
ObjektitProject (event payload)
{
  "id": "40be00e0-7e34-4f7a-864b-5cc986f575b8",
  "workspaceId": "824650d2-d0b3-4cac-8df8-5743ae9ff65a",
  "key": "WHX",
  "name": "Warehouse expansion",
  "description": null,
  "startDate": "2026-10-05",
  "deadline": null,
  "currency": "EUR",
  "scheduleFrom": "forward",
  "color": null,
  "archived": false,
  "createdAt": "2026-10-01T08:30:12.418Z",
  "updatedAt": "2026-10-01T08:30:12.418Z",
  "url": "https://planitude.app/app/projects/40be00e0-7e34-4f7a-864b-5cc986f575b8"
}

List webhook subscriptions

GET/api/webhooks

Avain lukuoikeudella

Kyselyparametrit

KenttäTyyppiKuvaus
workspaceIdstring (uuid)
projectIdstring (uuid)

Palauttaa

200 OK Subscriptions

KenttäTyyppiKuvaus
webhooksarray of Webhook
Pyyntö
curl https://planitude.app/api/webhooks \
  -H "Authorization: Bearer $PLANITUDE_API_KEY"
Vastaus200 OK
{
  "webhooks": [
    {
      "id": "1747ee7f-a395-4d3c-94b0-54b513d71d88",
      "workspaceId": "824650d2-d0b3-4cac-8df8-5743ae9ff65a",
      "workspaceName": "Acme Construction",
      "projectId": "40be00e0-7e34-4f7a-864b-5cc986f575b8",
      "projectName": "Warehouse expansion",
      "name": "Warehouse sync",
      "url": "https://example.com/hooks/planitude",
      "events": [
        "task.created",
        "task.completed"
      ],
      "secretPrefix": "whsec_Fdwl",
      "active": true,
      "disabledReason": null,
      "disabledAt": null,
      "consecutiveFailures": 0,
      "viaApi": true,
      "createdBy": {
        "id": "b1666432-132a-4ea9-b1ae-76ea69e226c5",
        "name": "Anna Rossi"
      },
      "createdAt": "2026-10-01T08:30:12.418Z",
      "updatedAt": "2026-10-01T08:30:12.418Z",
      "lastDeliveryAt": "2026-10-01T08:30:12.418Z",
      "lastSuccessAt": "2026-10-01T08:30:12.418Z"
    }
  ]
}

Subscribe (REST hook)

POST/api/webhooks

Avain kirjoitusoikeudella

Creates a subscription. The response contains the signing secret: it is shown only once. Aliases accepted for automation platforms: targetUrl for url, event for a single event.

Pyynnön runko

KenttäTyyppiKuvaus
url
pakollinen
string (uri)HTTPS endpoint that receives the events. Public addresses only.
events
pakollinen
array of string* = all events.

Yksi arvoista: project.created, project.updated, project.deleted, task.created, task.updated, task.deleted, task.completed, task.dates_changed, dependency.created, dependency.deleted, baseline.saved, member.invited, member.joined, comment.created, *

namestring
projectIdstring (uuid)Limit to one project (editor role needed). Omit for the whole workspace (owner/admin).
workspaceIdstring (uuid)

Palauttaa

201 Created Created

KenttäTyyppiKuvaus
webhookWebhook
secretstringwhsec_...
Pyyntö
curl -X POST https://planitude.app/api/webhooks \
  -H "Authorization: Bearer $PLANITUDE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "url": "https://example.com/hooks/planitude",
  "events": [
    "task.created",
    "task.completed"
  ],
  "projectId": "40be00e0-7e34-4f7a-864b-5cc986f575b8"
}'
Vastaus201 Created
{
  "webhook": {
    "id": "1747ee7f-a395-4d3c-94b0-54b513d71d88",
    "workspaceId": "824650d2-d0b3-4cac-8df8-5743ae9ff65a",
    "workspaceName": "Acme Construction",
    "projectId": "40be00e0-7e34-4f7a-864b-5cc986f575b8",
    "projectName": "Warehouse expansion",
    "name": "Warehouse sync",
    "url": "https://example.com/hooks/planitude",
    "events": [
      "task.created",
      "task.completed"
    ],
    "secretPrefix": "whsec_Fdwl",
    "active": true,
    "disabledReason": null,
    "disabledAt": null,
    "consecutiveFailures": 0,
    "viaApi": true,
    "createdBy": {
      "id": "b1666432-132a-4ea9-b1ae-76ea69e226c5",
      "name": "Anna Rossi"
    },
    "createdAt": "2026-10-01T08:30:12.418Z",
    "updatedAt": "2026-10-01T08:30:12.418Z",
    "lastDeliveryAt": "2026-10-01T08:30:12.418Z",
    "lastSuccessAt": "2026-10-01T08:30:12.418Z"
  },
  "secret": "whsec_3dvU0T1oaYlW4kH6m2Vb8nqXcR9eZpLsYw1QhGk"
}

Event catalog (public)

GET/api/webhooks/events

Julkinen, ei avainta

Palauttaa

200 OK Events

KenttäTyyppiKuvaus
apiVersionstring
eventsarray of string
Pyyntö
curl https://planitude.app/api/webhooks/events
Vastaus200 OK
{
  "apiVersion": "2026-10-01",
  "events": [
    "project.created",
    "project.updated",
    "project.deleted",
    "task.created",
    "task.updated",
    "task.deleted",
    "task.completed",
    "task.dates_changed",
    "dependency.created",
    "dependency.deleted",
    "baseline.saved",
    "member.invited",
    "member.joined",
    "comment.created"
  ]
}

Get a subscription

GET/api/webhooks/{webhookId}

Avain lukuoikeudella

Polun parametrit

KenttäTyyppiKuvaus
webhookId
pakollinen
string (uuid)Webhook id.

Palauttaa

200 OK Subscription

KenttäTyyppiKuvaus
webhookWebhook
Pyyntö
curl https://planitude.app/api/webhooks/1747ee7f-a395-4d3c-94b0-54b513d71d88 \
  -H "Authorization: Bearer $PLANITUDE_API_KEY"
Vastaus200 OK
{
  "webhook": {
    "id": "1747ee7f-a395-4d3c-94b0-54b513d71d88",
    "workspaceId": "824650d2-d0b3-4cac-8df8-5743ae9ff65a",
    "workspaceName": "Acme Construction",
    "projectId": "40be00e0-7e34-4f7a-864b-5cc986f575b8",
    "projectName": "Warehouse expansion",
    "name": "Warehouse sync",
    "url": "https://example.com/hooks/planitude",
    "events": [
      "task.created",
      "task.completed"
    ],
    "secretPrefix": "whsec_Fdwl",
    "active": true,
    "disabledReason": null,
    "disabledAt": null,
    "consecutiveFailures": 0,
    "viaApi": true,
    "createdBy": {
      "id": "b1666432-132a-4ea9-b1ae-76ea69e226c5",
      "name": "Anna Rossi"
    },
    "createdAt": "2026-10-01T08:30:12.418Z",
    "updatedAt": "2026-10-01T08:30:12.418Z",
    "lastDeliveryAt": "2026-10-01T08:30:12.418Z",
    "lastSuccessAt": "2026-10-01T08:30:12.418Z"
  }
}

Update, pause or resume a subscription

PATCH/api/webhooks/{webhookId}

Avain kirjoitusoikeudella

Polun parametrit

KenttäTyyppiKuvaus
webhookId
pakollinen
string (uuid)Webhook id.

Pyynnön runko

KenttäTyyppiKuvaus
namestring
urlstring (uri)
eventsarray of string
activebooleanfalse = pause; true = resume (also resets the failure counter).

Palauttaa

200 OK Updated

KenttäTyyppiKuvaus
webhookWebhook
Pyyntö
curl -X PATCH https://planitude.app/api/webhooks/1747ee7f-a395-4d3c-94b0-54b513d71d88 \
  -H "Authorization: Bearer $PLANITUDE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"active":false}'
Vastaus200 OK
{
  "webhook": {
    "id": "1747ee7f-a395-4d3c-94b0-54b513d71d88",
    "workspaceId": "824650d2-d0b3-4cac-8df8-5743ae9ff65a",
    "workspaceName": "Acme Construction",
    "projectId": "40be00e0-7e34-4f7a-864b-5cc986f575b8",
    "projectName": "Warehouse expansion",
    "name": "Warehouse sync",
    "url": "https://example.com/hooks/planitude",
    "events": [
      "task.created",
      "task.completed"
    ],
    "secretPrefix": "whsec_Fdwl",
    "active": true,
    "disabledReason": null,
    "disabledAt": null,
    "consecutiveFailures": 0,
    "viaApi": true,
    "createdBy": {
      "id": "b1666432-132a-4ea9-b1ae-76ea69e226c5",
      "name": "Anna Rossi"
    },
    "createdAt": "2026-10-01T08:30:12.418Z",
    "updatedAt": "2026-10-01T08:30:12.418Z",
    "lastDeliveryAt": "2026-10-01T08:30:12.418Z",
    "lastSuccessAt": "2026-10-01T08:30:12.418Z"
  }
}

Unsubscribe (REST hook)

DEL/api/webhooks/{webhookId}

Avain kirjoitusoikeudella

Polun parametrit

KenttäTyyppiKuvaus
webhookId
pakollinen
string (uuid)Webhook id.

Palauttaa

204 No Content Deleted

Pyyntö
curl -X DELETE https://planitude.app/api/webhooks/1747ee7f-a395-4d3c-94b0-54b513d71d88 \
  -H "Authorization: Bearer $PLANITUDE_API_KEY"

Delivery log (newest first, kept 30 days)

GET/api/webhooks/{webhookId}/deliveries

Avain lukuoikeudella

Polun parametrit

KenttäTyyppiKuvaus
webhookId
pakollinen
string (uuid)Webhook id.

Kyselyparametrit

KenttäTyyppiKuvaus
limitinteger1-100.

Oletus: 50

beforestring (date-time)nextCursor of the previous page.

Palauttaa

200 OK Deliveries

KenttäTyyppiKuvaus
deliveriesarray of Delivery
nextCursorstringvoi olla null
Pyyntö
curl https://planitude.app/api/webhooks/1747ee7f-a395-4d3c-94b0-54b513d71d88/deliveries \
  -H "Authorization: Bearer $PLANITUDE_API_KEY"
Vastaus200 OK
{
  "deliveries": [
    {
      "id": "4b207161-80f9-40bb-bc3f-d8f70315be00",
      "eventId": "6f1c1d1e-2f4b-4d0a-9a77-2a3c5b1e9f10",
      "eventType": "task.completed",
      "status": "success",
      "attempts": 1,
      "nextAttemptAt": null,
      "lastAttemptAt": "2026-10-01T08:30:12.418Z",
      "responseStatus": 200,
      "responseExcerpt": "{\"ok\":true}",
      "error": null,
      "durationMs": 39,
      "manual": false,
      "createdAt": "2026-10-01T08:30:12.418Z"
    }
  ],
  "nextCursor": null
}

Body sent with a delivery

GET/api/webhooks/{webhookId}/deliveries/{deliveryId}

Avain lukuoikeudella

Polun parametrit

KenttäTyyppiKuvaus
webhookId
pakollinen
string (uuid)Webhook id.
deliveryId
pakollinen
string (uuid)

Palauttaa

200 OK Payload

KenttäTyyppiKuvaus
payloadEvent
Pyyntö
curl https://planitude.app/api/webhooks/1747ee7f-a395-4d3c-94b0-54b513d71d88/deliveries/4b207161-80f9-40bb-bc3f-d8f70315be00 \
  -H "Authorization: Bearer $PLANITUDE_API_KEY"
Vastaus200 OK
{
  "payload": {
    "id": "6f1c1d1e-2f4b-4d0a-9a77-2a3c5b1e9f10",
    "type": "project.created",
    "apiVersion": "2026-10-01",
    "createdAt": "2026-10-01T08:30:12.418Z",
    "workspaceId": "824650d2-d0b3-4cac-8df8-5743ae9ff65a",
    "projectId": "40be00e0-7e34-4f7a-864b-5cc986f575b8",
    "actor": {
      "id": "b1666432-132a-4ea9-b1ae-76ea69e226c5",
      "name": "Anna Rossi"
    },
    "data": {}
  }
}

Send the same event again

POST/api/webhooks/{webhookId}/deliveries/{deliveryId}/redeliver

Avain kirjoitusoikeudella

Polun parametrit

KenttäTyyppiKuvaus
webhookId
pakollinen
string (uuid)Webhook id.
deliveryId
pakollinen
string (uuid)

Palauttaa

202 Accepted Queued

KenttäTyyppiKuvaus
deliveryDelivery
Pyyntö
curl -X POST https://planitude.app/api/webhooks/1747ee7f-a395-4d3c-94b0-54b513d71d88/deliveries/4b207161-80f9-40bb-bc3f-d8f70315be00/redeliver \
  -H "Authorization: Bearer $PLANITUDE_API_KEY"
Vastaus202 Accepted
{
  "delivery": {
    "id": "4b207161-80f9-40bb-bc3f-d8f70315be00",
    "eventId": "6f1c1d1e-2f4b-4d0a-9a77-2a3c5b1e9f10",
    "eventType": "task.completed",
    "status": "success",
    "attempts": 1,
    "nextAttemptAt": null,
    "lastAttemptAt": "2026-10-01T08:30:12.418Z",
    "responseStatus": 200,
    "responseExcerpt": "{\"ok\":true}",
    "error": null,
    "durationMs": 39,
    "manual": false,
    "createdAt": "2026-10-01T08:30:12.418Z"
  }
}

Send a webhook.ping test event

POST/api/webhooks/{webhookId}/test

Avain kirjoitusoikeudella

Polun parametrit

KenttäTyyppiKuvaus
webhookId
pakollinen
string (uuid)Webhook id.

Palauttaa

202 Accepted Queued

KenttäTyyppiKuvaus
deliveryDelivery
Pyyntö
curl -X POST https://planitude.app/api/webhooks/1747ee7f-a395-4d3c-94b0-54b513d71d88/test \
  -H "Authorization: Bearer $PLANITUDE_API_KEY"
Vastaus202 Accepted
{
  "delivery": {
    "id": "4b207161-80f9-40bb-bc3f-d8f70315be00",
    "eventId": "6f1c1d1e-2f4b-4d0a-9a77-2a3c5b1e9f10",
    "eventType": "task.completed",
    "status": "success",
    "attempts": 1,
    "nextAttemptAt": null,
    "lastAttemptAt": "2026-10-01T08:30:12.418Z",
    "responseStatus": 200,
    "responseExcerpt": "{\"ok\":true}",
    "error": null,
    "durationMs": 39,
    "manual": false,
    "createdAt": "2026-10-01T08:30:12.418Z"
  }
}

Generate a new signing secret

POST/api/webhooks/{webhookId}/rotate-secret

Avain kirjoitusoikeudella

Polun parametrit

KenttäTyyppiKuvaus
webhookId
pakollinen
string (uuid)Webhook id.

Palauttaa

200 OK New secret (shown once)

KenttäTyyppiKuvaus
webhookWebhook
secretstring
Pyyntö
curl -X POST https://planitude.app/api/webhooks/1747ee7f-a395-4d3c-94b0-54b513d71d88/rotate-secret \
  -H "Authorization: Bearer $PLANITUDE_API_KEY"
Vastaus200 OK
{
  "webhook": {
    "id": "1747ee7f-a395-4d3c-94b0-54b513d71d88",
    "workspaceId": "824650d2-d0b3-4cac-8df8-5743ae9ff65a",
    "workspaceName": "Acme Construction",
    "projectId": "40be00e0-7e34-4f7a-864b-5cc986f575b8",
    "projectName": "Warehouse expansion",
    "name": "Warehouse sync",
    "url": "https://example.com/hooks/planitude",
    "events": [
      "task.created",
      "task.completed"
    ],
    "secretPrefix": "whsec_Fdwl",
    "active": true,
    "disabledReason": null,
    "disabledAt": null,
    "consecutiveFailures": 0,
    "viaApi": true,
    "createdBy": {
      "id": "b1666432-132a-4ea9-b1ae-76ea69e226c5",
      "name": "Anna Rossi"
    },
    "createdAt": "2026-10-01T08:30:12.418Z",
    "updatedAt": "2026-10-01T08:30:12.418Z",
    "lastDeliveryAt": "2026-10-01T08:30:12.418Z",
    "lastSuccessAt": "2026-10-01T08:30:12.418Z"
  },
  "secret": "whsec_3dvU0T1oaYlW4kH6m2Vb8nqXcR9eZpLsYw1QhGk"
}

Webhookit

Webhookit

Webhookit lähettävät päätepisteeseesi HTTPS-POST-pyynnön JSON-runkoineen heti, kun jokin muuttuu, tulipa muutos verkkosovelluksesta, API:sta, MCP-palvelimelta tai tuonnista. Webhook kattaa yhden projektin tai työtilan kaikki projektit (omistajat ja ylläpitäjät).

Luo ne kohdassa Profiili → Webhookit tai API:lla REST-koukkuina: tilaa komennolla POST /api/webhooks, peruuta komennolla DELETE. Allekirjoitusavain näytetään vain kerran.

Jokaisessa pyynnössä on nämä otsakkeet:

OtsakeKuvaus
Planitude-Signaturet=<unix seconds>,v1=<hex HMAC-SHA256>: see Verify signatures.
Planitude-EventEvent type, e.g. task.completed.
Planitude-Event-IdEvent id, the same in every retry: use it to deduplicate.
Planitude-DeliveryId of this delivery (changes with a manual resend).
User-AgentPlanitude-Webhooks/1.0 (+https://planitude.app/developers)
Content-Typeapplication/json
Pyyntö
curl -X POST https://planitude.app/api/webhooks \
  -H "Authorization: Bearer $PLANITUDE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "url": "https://example.com/hooks/planitude",
  "events": [
    "task.created",
    "task.completed"
  ],
  "projectId": "40be00e0-7e34-4f7a-864b-5cc986f575b8"
}'
Vastaus201 Created
{
  "webhook": {
    "id": "1747ee7f-a395-4d3c-94b0-54b513d71d88",
    "workspaceId": "824650d2-d0b3-4cac-8df8-5743ae9ff65a",
    "workspaceName": "Acme Construction",
    "projectId": "40be00e0-7e34-4f7a-864b-5cc986f575b8",
    "projectName": "Warehouse expansion",
    "name": "Warehouse sync",
    "url": "https://example.com/hooks/planitude",
    "events": [
      "task.created",
      "task.completed"
    ],
    "secretPrefix": "whsec_Fdwl",
    "active": true,
    "disabledReason": null,
    "disabledAt": null,
    "consecutiveFailures": 0,
    "viaApi": true,
    "createdBy": {
      "id": "b1666432-132a-4ea9-b1ae-76ea69e226c5",
      "name": "Anna Rossi"
    },
    "createdAt": "2026-10-01T08:30:12.418Z",
    "updatedAt": "2026-10-01T08:30:12.418Z",
    "lastDeliveryAt": "2026-10-01T08:30:12.418Z",
    "lastSuccessAt": "2026-10-01T08:30:12.418Z"
  },
  "secret": "whsec_3dvU0T1oaYlW4kH6m2Vb8nqXcR9eZpLsYw1QhGk"
}

Tapahtumatyypit

Tilaa yksittäisiä tapahtumia tai kaikki arvolla *. Jokaisella tapahtumalla on sama kehys; data vaihtelee tyypin mukaan.

TapahtumaKuvaus
project.createdA project was created (blank, from a template, duplicated or imported from MS Project).
project.updatedProject fields changed (name, dates, deadline, archive...), or a saved version was restored.
project.deletedA project was deleted.
task.createdA task was created.
task.updatedTask fields or assignees changed. changes lists only the fields that changed.
task.deletedA task was deleted (one event per task of a deleted branch).
task.completedTask progress reached 100%.
task.dates_changedStart or finish moved, because of an edit (cause: edit) or because the schedule was recalculated (cause: reschedule).
dependency.createdA dependency was created or changed.
dependency.deletedA dependency was removed.
baseline.savedA baseline was saved.
member.invitedAn invite link was created for the project.
member.joinedA person joined the project.
comment.createdA comment was added to a task.
Esimerkkikuorma
{
  "id": "6f1c1d1e-2f4b-4d0a-9a77-2a3c5b1e9f10",
  "type": "project.created",
  "apiVersion": "2026-10-01",
  "createdAt": "2026-10-01T08:30:12.418Z",
  "workspaceId": "824650d2-d0b3-4cac-8df8-5743ae9ff65a",
  "projectId": "40be00e0-7e34-4f7a-864b-5cc986f575b8",
  "actor": {
    "id": "b1666432-132a-4ea9-b1ae-76ea69e226c5",
    "name": "Anna Rossi"
  },
  "data": {
    "project": {
      "id": "40be00e0-7e34-4f7a-864b-5cc986f575b8",
      "workspaceId": "824650d2-d0b3-4cac-8df8-5743ae9ff65a",
      "key": "WHX",
      "name": "Warehouse expansion",
      "description": null,
      "startDate": "2026-10-05",
      "deadline": null,
      "currency": "EUR",
      "scheduleFrom": "forward",
      "color": null,
      "archived": false,
      "createdAt": "2026-10-01T08:30:12.418Z",
      "updatedAt": "2026-10-01T08:30:12.418Z",
      "url": "https://planitude.app/app/projects/40be00e0-7e34-4f7a-864b-5cc986f575b8"
    },
    "source": "blank"
  }
}

Allekirjoitusten varmennus

Jokainen pyyntö allekirjoitetaan HMAC-SHA256:lla ja webhookisi salaisuudella. Otsake Planitude-Signature sisältää aikaleiman t ja allekirjoituksen v1, laskettuna arvoista t, piste ja raaka runko.

  1. Käytä raakaa runkoa ennen JSON-jäsennystä: uudelleenserialisoidun rungon allekirjoitus on erilainen.
  2. Laske HMAC ja vertaa sitä vakioajassa.
  3. Hylkää pyynnöt, joiden aikaleima poikkeaa kellostasi yli 5 minuuttia: kaapattua pyyntöä ei voi toistaa.
  4. Kierrätä salaisuus milloin haluat: vanha lakkaa toimimasta heti.
Verify
import { createHmac, timingSafeEqual } from "node:crypto";

// rawBody: the request body as a string, before JSON.parse
export function verifyPlanitude(rawBody, header, secret, toleranceSec = 300) {
  const parts = Object.fromEntries(header.split(",").map((p) => p.split("=")));
  const t = Number(parts.t);
  if (!t || Math.abs(Date.now() / 1000 - t) > toleranceSec) return false; // replay
  const expected = createHmac("sha256", secret).update(`${t}.${rawBody}`).digest();
  const given = Buffer.from(parts.v1 ?? "", "hex");
  return given.length === expected.length && timingSafeEqual(given, expected);
}

// Express: app.post("/hooks/planitude", express.raw({ type: "application/json" }), (req, res) => {
//   if (!verifyPlanitude(req.body.toString("utf8"), req.get("Planitude-Signature"), process.env.PLANITUDE_WEBHOOK_SECRET)) return res.sendStatus(400);
//   res.sendStatus(200); // then process the event in a queue
// });

Uudelleenyritykset ja toimitus

Vastaa millä tahansa 2xx-vastauksella 10 sekunnin kuluessa ja tee varsinainen työ jälkikäteen jonossa. Uudelleenohjauksia ei seurata. Virheiden ja aikakatkaisujen yhteydessä Planitude yrittää yhteensä enintään 6 kertaa: heti ja sitten ajan 1 min, 5 min, 30 min, 2 h, 12 h kuluttua.

Toimitus on vähintään kerran ja ilman järjestystä. Tallenna tapahtuman tunniste (Planitude-Event-Id, myös id rungossa) ja ohita jo käsitellyt; järjestä kentän createdAt mukaan.

Kun 5 peräkkäisen tapahtuman kaikki yritykset epäonnistuvat, webhook poistetaan käytöstä ja sen omistaja saa sähköpostin. Vastaus 410 Gone poistaa sen käytöstä heti. Ota se uudelleen käyttöön profiilista tai komennolla PATCH ja arvolla active: true.

Toimituslokia (tila, HTTP-koodi, vastauksen ote, kuorma, manuaalinen uudelleenlähetys) säilytetään 30 päivää. Kohteiksi hyväksytään vain julkiset osoitteet.

Uudelleenyritysaikataulu6 × POST
Yritys 1   heti
Yritys 2   + 1 min
Yritys 3   + 5 min
Yritys 4   + 30 min
Yritys 5   + 2 h
Yritys 6   + 12 h

Testaa päätepisteesi

  1. Lähetä webhook.ping-tapahtuma testipäätepisteellä tai profiilin Testaa-painikkeella.
  2. Jos haluat vastaanottaa tapahtumia tietokoneellesi, julkaise paikallinen palvelimesi tunnelilla (esimerkiksi ngrok tai Cloudflare Tunnel) ja tilaa sen julkinen HTTPS-osoite.
  3. Avaa toimitusloki nähdäksesi tilan, HTTP-koodin ja vastauksen, ja lähetä toimitus uudelleen, kun päätepisteesi on korjattu.
Pyyntö
curl -X POST https://planitude.app/api/webhooks/1747ee7f-a395-4d3c-94b0-54b513d71d88/test \
  -H "Authorization: Bearer $PLANITUDE_API_KEY"
Vastaus202 Accepted
{
  "delivery": {
    "id": "4b207161-80f9-40bb-bc3f-d8f70315be00",
    "eventId": "6f1c1d1e-2f4b-4d0a-9a77-2a3c5b1e9f10",
    "eventType": "task.completed",
    "status": "success",
    "attempts": 1,
    "nextAttemptAt": null,
    "lastAttemptAt": "2026-10-01T08:30:12.418Z",
    "responseStatus": 200,
    "responseExcerpt": "{\"ok\":true}",
    "error": null,
    "durationMs": 39,
    "manual": false,
    "createdAt": "2026-10-01T08:30:12.418Z"
  }
}

Tekoäly ja MCP

MCP-palvelin

Planitude on MCP-palvelin (Model Context Protocol): tekoälyavustajat ja koodieditorit lukevat projekteja, analysoivat kriittistä polkua ja kuormitusta sekä luovat tai muuttavat tehtäviä oikeuksillasi. Verkkosovellukset yhdistetään OAuthilla (kirjaudut sisään ja sallit pääsyn); komentorivityökalut ja editorit käyttävät API-avainta.

Palvelimen URL

https://planitude.app/mcp

  • ChatGPTOAuth

    Avaa ChatGPT:ssä Settings › Security and login ja ota käyttöön Developer mode. Luo sovellus palvelimen URL-osoitteella ja OAuth-todennuksella, kirjaudu sitten Planitudeen ja salli pääsy.

    Virallinen dokumentaatio ↗
  • ClaudeOAuth

    Avaa Customize › Connectors › Add custom connector, liitä palvelimen URL ja valitse Connect: Planitude avautuu, kirjaudut sisään ja sallit pääsyn. Toimii claude.ai:ssa, Claude Desktopissa ja mobiilisovelluksessa.

    Virallinen dokumentaatio ↗
  • GeminiOAuth

    Avaa osoitteessa gemini.google.com Settings › Connected Apps, valitse Add a custom app ja liitä palvelimen URL; kirjaudu sitten Planitudeen ja salli pääsy.

    Virallinen dokumentaatio ↗
  • Claude CodeAPI-avain

    Suorita komento avaimesi ollessa ympäristömuuttujassa. Lisää --scope user käyttääksesi sitä jokaisessa projektissa ja tarkista komennolla claude mcp list.

    Virallinen dokumentaatio ↗
  • CodexAPI-avain

    Tallenna avain muuttujaan PLANITUDE_API_KEY ja lisää lohko tiedostoon ~/.codex/config.toml: se pätee CLI:hin, sovellukseen ja IDE-laajennukseen.

    Virallinen dokumentaatio ↗
  • CursorAPI-avain

    Lisää lohko tiedostoon ~/.cursor/mcp.json (kaikki projektit) tai .cursor/mcp.json (yksi projekti); Cursor lukee avaimen ympäristöstä.

    Virallinen dokumentaatio ↗
  • Lisää .vscode/mcp.json työtilaan: VS Code kysyy avainta kerran ja tallentaa sen turvallisesti tiedoston ulkopuolelle.

    Virallinen dokumentaatio ↗
  • Gemini CLIAPI-avain

    Suorita komento avaimesi ollessa ympäristömuuttujassa tai lisää lohko tiedostoon ~/.gemini/settings.json.

    Virallinen dokumentaatio ↗

Työkalut

Palvelin tarjoaa 29 työkalua lukemisesta ja analyysista turvallisiin muutoksiin. Mikään niistä ei poista projekteja tai tehtäviä.

read

  • planitude_list_projects
  • planitude_portfolio_overview
  • planitude_get_project
  • planitude_critical_path
  • planitude_delay_impact
  • planitude_monte_carlo
  • planitude_workload
  • planitude_list_baselines
  • planitude_list_versions
  • planitude_list_templates
  • planitude_list_comments
  • planitude_preview_import

write

  • planitude_create_project
  • planitude_create_project_from_template
  • planitude_create_project_from_plan
  • planitude_import_file
  • planitude_edit_project
  • planitude_add_task
  • planitude_update_task
  • planitude_set_progress
  • planitude_indent_task
  • planitude_outdent_task
  • planitude_link_tasks
  • planitude_unlink_tasks
  • planitude_reschedule
  • planitude_configure_simulation
  • planitude_add_comment
  • planitude_save_baseline
  • planitude_save_version
MCP

Server URL

https://planitude.app/mcp

Muutosloki

  1. Uusi kehittäjädokumentaatio, luotu OpenAPI-dokumentista. OpenAPI-dokumentti kuvaa nyt jokaisen jäsenille, kommenteille, perusarvioille, mallipohjille ja vastuuhenkilöille palautettavan kentän.

  2. API-versio 2026-10-01: allekirjoitetut lähtevät webhookit, dokumentoitu julkinen REST API (OpenAPI 3.1), kursorisivutus ja haku tunnisteella externalId.

  3. OAuth 2.1 MCP-palvelimelle ja APIlle: ChatGPT, Claude ja Gemini yhdistetään ilman avaimen kopiointia.

  4. MCP-palvelin ja henkilökohtaiset API-avaimet luku- tai luku- ja kirjoitusoikeudella.

Mainonta pitää Planituden ilmaisena