डेवलपर्स

Planitude के साथ निर्माण करें

REST API, हस्ताक्षरित वेबहुक और MCP सर्वर: अपने सिस्टम को योजना के साथ सिंक रखें, हर बदलाव पर प्रतिक्रिया दें और AI असिस्टेंट को अपने प्रोजेक्ट पर काम करने दें।

अधिकांश API दस्तावेज़ों की तरह कोड, फ़ील्ड नाम और तकनीकी संदर्भ अंग्रेज़ी में हैं।

बेस URL: https://planitude.app

अनुरोध और प्रतिक्रियाएँ HTTPS पर JSON में होती हैं। अवधि और लैग कार्य-मिनट में हैं (8 घंटे का दिन 480 होता है), इंस्टेंट UTC में ISO 8601 हैं, समय के बिना तारीखें YYYY-MM-DD हैं।

अनुरोध
curl https://planitude.app/api/auth/me \
  -H "Authorization: Bearer $PLANITUDE_API_KEY"
प्रतिक्रिया200 OK
{
  "user": {
    "id": "b1666432-132a-4ea9-b1ae-76ea69e226c5",
    "email": "[email protected]",
    "name": "Anna Rossi",
    "avatarUrl": null,
    "locale": "en",
    "emailVerified": true
  }
}

क्विकस्टार्ट

तीन चरणों में शून्य से अपने पहले वेबहुक तक। आपको बस एक टर्मिनल चाहिए।

  1. API कुंजी बनाएँ

    प्रोफ़ाइल → API कुंजियाँ खोलें, पढ़ें और लिखें चुनें और कुंजी कॉपी करें: यह gnt_ से शुरू होती है और केवल एक बार दिखाई जाती है। इसे एनवायरनमेंट वेरिएबल में रखें।

  2. अपनी पहली कॉल करें

    आपको दिखने वाले प्रोजेक्ट की सूची प्राप्त करें। कुंजी आपकी ओर से काम करती है: वही प्रोजेक्ट, वही भूमिकाएँ।

  3. वेबहुक प्राप्त करें

    अपनी ज़रूरत के इवेंट के लिए एक सार्वजनिक HTTPS एंडपॉइंट सब्सक्राइब करें, फिर तुरंत एक टेस्ट इवेंट भेजें और उसका हस्ताक्षर सत्यापित करें।

1Terminal
export PLANITUDE_API_KEY="gnt_…"
2
curl https://planitude.app/api/projects \
  -H "Authorization: Bearer $PLANITUDE_API_KEY"
अपेक्षित परिणाम200 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"
}'
उदाहरण पेलोडwebhook.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"
      ]
    }
  }
}

प्रमाणीकरण

हर अनुरोध को Authorization हेडर में बेयरर टोकन के रूप में व्यक्तिगत API कुंजी से प्रमाणित करें। कुंजियाँ व्यक्तिगत होती हैं: वे आपकी ओर से, प्रत्येक प्रोजेक्ट पर आपकी भूमिका के साथ काम करती हैं, उससे अधिक कभी नहीं। आप कुंजी को एक वर्कस्पेस तक सीमित कर सकते हैं, उसकी समाप्ति तिथि तय कर सकते हैं और किसी भी समय रद्द कर सकते हैं; हर कॉल कुंजी के साथ लॉग की जाती है।

स्कोप

स्कोपअनुमति देता है
readplanitude:readप्रोजेक्ट, टास्क, डिपेंडेंसी, सदस्य, टिप्पणियाँ, बेसलाइन और वेबहुक पढ़ें।
writeplanitude:writeपढ़ने की सभी सुविधाएँ, साथ ही प्रोजेक्ट, टास्क, डिपेंडेंसी, टिप्पणियाँ, बेसलाइन और वेबहुक बनाना और बदलना।

कुंजियाँ और OAuth ऐप प्रोजेक्ट या टास्क हटा नहीं सकते: हटाना वेब ऐप में ही रहता है, जहाँ कोई व्यक्ति उसकी पुष्टि करता है। गलत आईडी को लक्षित करने वाली स्क्रिप्ट पूरी योजना नहीं मिटा सकती।

तृतीय-पक्ष ऐप के लिए OAuth 2.1

दूसरे लोगों की ओर से काम करने वाले ऐप OAuth 2.1 का उपयोग करते हैं: PKCE (S256) के साथ ऑथराइज़ेशन कोड, हर उपयोग पर बदले जाने वाले रिफ़्रेश टोकन, डायनेमिक क्लाइंट रजिस्ट्रेशन (RFC 7591)। रिसोर्स https://planitude.app/api और स्कोप planitude:read या planitude:write माँगें।

एंडपॉइंट मानक डिस्कवरी दस्तावेज़ों में प्रकाशित हैं, इसलिए OAuth लाइब्रेरी स्वयं कॉन्फ़िगर हो जाती हैं।

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

अच्छे अभ्यास

  • कुंजियों को एनवायरनमेंट वेरिएबल या सीक्रेट मैनेजर में रखें, कभी कोड या रिपॉज़िटरी में नहीं। कुंजियाँ gnt_ से शुरू होती हैं, इसलिए सीक्रेट स्कैनर उन्हें पहचान सकते हैं।
  • केवल पढ़ने पर रीड-ओनली कुंजी और हर इंटीग्रेशन के लिए एक अलग कुंजी का उपयोग करें: आप एक को रद्द कर सकते हैं और बाकी चलते रहेंगे।
  • स्क्रिप्ट द्वारा उपयोग की जाने वाली कुंजियों की समाप्ति तिथि तय करें और उन्हें रोटेट करें।
  • API को अपने सर्वर से कॉल करें, ब्राउज़र से नहीं: फ्रंट-एंड कोड में कुंजी सार्वजनिक कुंजी होती है।
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"
  ]
}

त्रुटियाँ

Planitude मानक HTTP स्टेटस कोड का उपयोग करता है। त्रुटियों का JSON रूप हमेशा समान होता है: शाखा बनाने के लिए एक स्थिर error कोड और, ज़रूरत होने पर, कारण या सुधारे जाने वाले फ़ील्ड के साथ details।

स्टेटसअर्थ
400invalid_requestअनुरोध मान्य नहीं है: details.fields हर फ़ील्ड और उसकी समस्या सूचीबद्ध करता है।
401unauthorizedकुंजी अनुपस्थित, अमान्य, रद्द या समाप्त हो चुकी है।
403forbiddenकुंजी या आपकी भूमिका इसकी अनुमति नहीं देती (details.reason), उदाहरण के लिए रीड-ओनली कुंजी से लिखना, या हटाना।
404not_foundनहीं मिला, या आपको दिखाई नहीं देता।
409dependency_cycleयोजना के साथ टकराव, उदाहरण के लिए ऐसी डिपेंडेंसी जो चक्र बना देगी (dependency_cycle)।
429rate_limitedबहुत अधिक अनुरोध: Retry-After में दिए सेकंड प्रतीक्षा करें।
500server_errorहमारी ओर से कुछ गड़बड़ हुई: एक्सपोनेंशियल बैकऑफ़ के साथ पुनः प्रयास करें।

Error

फ़ील्डप्रकारविवरण
error
आवश्यक
stringStable error code: invalid_request, unauthorized, forbidden, not_found, conflict, dependency_cycle, limit_exceeded, rate_limited, server_error, ...
detailsobject
प्रतिक्रिया
{
  "error": "invalid_request",
  "details": {
    "fields": [
      {
        "path": "name",
        "message": "Invalid input: expected string, received undefined"
      },
      {
        "path": "durationMin",
        "message": "Too small: expected number to be >=0"
      }
    ]
  }
}

रेट लिमिट

सीमाएँ प्रति कुंजी, एक मिनट की स्लाइडिंग विंडो में लागू होती हैं: 240 रीड अनुरोध और 60 राइट अनुरोध। सीमा पार होने पर आपको सेकंड में Retry-After हेडर के साथ 429 rate_limited मिलता है।

पुनः प्रयास से पहले Retry-After की प्रतीक्षा करें, बल्क कार्य को समय में फैलाएँ और कई बदलावों को एक चेंज सेट में समूहित करें: एक अनुरोध और एक पुनर्गणना में अधिकतम 1,000 बदलाव।

प्रतिक्रियाHTTP
HTTP/1.1 429 Too Many Requests
Retry-After: 12
Content-Type: application/json

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

पेजिनेशन और खोज

टास्क सूचियाँ कर्सर से पेजिनेटेड होती हैं। limit दें (1–500, डिफ़ॉल्ट 100) और अगले पेज के लिए पिछली प्रतिक्रिया का nextCursor cursor के रूप में दें। जब nextCursor null हो, तो और पेज नहीं हैं।

externalId (आपकी अपनी आईडी पर सटीक मिलान), q (नाम में शामिल), updatedSince और completed से फ़िल्टर करें; sort=-number (नवीनतम पहले) या -updatedAt से क्रमबद्ध करें। छोटी सूचियाँ, जैसे प्रोजेक्ट, सदस्य और डिपेंडेंसी, एक ही प्रतिक्रिया में पूरी लौटती हैं।

अनुरोध
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"

वर्ज़निंग

API और वेबहुक पेलोड तारीख़ के आधार पर वर्ज़न किए जाते हैं। वर्तमान वर्ज़न 2026-10-01 है: यह हर इवेंट का apiVersion फ़ील्ड और OpenAPI दस्तावेज़ का info.version है।

एक वर्ज़न के भीतर हम केवल जोड़ते हैं: नए एंडपॉइंट, नए वैकल्पिक फ़ील्ड, नए इवेंट प्रकार। नए वर्ज़न के बिना फ़ील्ड कभी हटाए या उनका प्रकार नहीं बदला जाता, इसलिए जिन फ़ील्ड को आप नहीं जानते उन्हें अनदेखा करें।

अनुरोध
curl https://planitude.app/api/webhooks/events
प्रतिक्रिया200 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 संदर्भ

Account

Who is calling, and their workspaces.

एंडपॉइंट

User

एट्रिब्यूट

फ़ील्डप्रकारविवरण
idstring (uuid)
emailstring (email)
namestringnullable
avatarUrlstringnullable
localestring
emailVerifiedboolean
ऑब्जेक्टUser
{
  "id": "b1666432-132a-4ea9-b1ae-76ea69e226c5",
  "email": "[email protected]",
  "name": "Anna Rossi",
  "avatarUrl": null,
  "locale": "en",
  "emailVerified": true
}

Workspace

एट्रिब्यूट

फ़ील्डप्रकारविवरण
idstring (uuid)
namestring
rolestring

इनमें से एक: owner, admin, member

ऑब्जेक्टWorkspace
{
  "id": "824650d2-d0b3-4cac-8df8-5743ae9ff65a",
  "name": "Acme Construction",
  "role": "owner"
}

Current user (connection test)

GET/api/auth/me

रीड एक्सेस वाली कुंजी

रिटर्न करता है

200 OK The user

फ़ील्डप्रकारविवरण
userUser
अनुरोध
curl https://planitude.app/api/auth/me \
  -H "Authorization: Bearer $PLANITUDE_API_KEY"
प्रतिक्रिया200 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

रीड एक्सेस वाली कुंजी

रिटर्न करता है

200 OK Workspaces

फ़ील्डप्रकारविवरण
workspacesarray of Workspace
अनुरोध
curl https://planitude.app/api/workspaces \
  -H "Authorization: Bearer $PLANITUDE_API_KEY"
प्रतिक्रिया200 OK
{
  "workspaces": [
    {
      "id": "824650d2-d0b3-4cac-8df8-5743ae9ff65a",
      "name": "Acme Construction",
      "role": "owner"
    }
  ]
}

API संदर्भ

Projects

Projects, templates and baselines.

Project

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

एट्रिब्यूट

फ़ील्डप्रकारविवरण
idstring (uuid)
workspaceIdstring (uuid)
keystringProject key, e.g. CRON (task keys are CRON-12).
keyLockedboolean
namestring
descriptionstringnullable
startDatestring (date)
calendarIdstring (uuid)nullable
currencystring
scheduleFromstring

इनमें से एक: forward, backward

deadlinestring (date)nullable
colorstringnullable
settingsobject
archivedAtstring (date-time)nullable
createdBystring (uuid)nullable
createdAtstring (date-time)
updatedAtstring (date-time)
ऑब्जेक्ट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"
}

Template

एट्रिब्यूट

फ़ील्डप्रकारविवरण
idstringbuiltin:<slug> or the id of a template saved by you.
kindstring

इनमें से एक: builtin, user

namestring
descriptionstringnullable
taskCountinteger
durationDaysintegerWorking days from start to finish.
ऑब्जेक्टTemplate
{
  "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

एट्रिब्यूट

फ़ील्डप्रकारविवरण
idstring (uuid)
namestring
indexintegernullableNumbered MS Project baseline (1-10); null for the main baseline and the ones you name.
capturedAtstring (date-time)
capturedBystring (uuid)nullable
taskCountinteger
ऑब्जेक्ट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
}

List projects

GET/api/projects

रीड एक्सेस वाली कुंजी

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

क्वेरी पैरामीटर

फ़ील्डप्रकारविवरण
archivedstring

इनमें से एक: 1

रिटर्न करता है

200 OK Projects

फ़ील्डप्रकारविवरण
projectsarray of Project
अनुरोध
curl https://planitude.app/api/projects \
  -H "Authorization: Bearer $PLANITUDE_API_KEY"
प्रतिक्रिया200 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

राइट एक्सेस वाली कुंजी

अनुरोध बॉडी

फ़ील्डप्रकारविवरण
name
आवश्यक
string
workspaceIdstring (uuid)Defaults to your personal workspace.
keystring2-5 letters/digits, starts with a letter. Derived from the name if omitted.
descriptionstringnullable
startDatestring (date)
deadlinestring (date)nullable
currencystring
scheduleFromstring

इनमें से एक: forward, backward

colorstringnullable

रिटर्न करता है

201 Created Created

फ़ील्डप्रकारविवरण
projectProject
अनुरोध
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"}'
प्रतिक्रिया201 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

राइट एक्सेस वाली कुंजी

अनुरोध बॉडी

फ़ील्डप्रकारविवरण
templateId
आवश्यक
stringId from GET /api/templates.
startDate
आवश्यक
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)

रिटर्न करता है

201 Created Created

फ़ील्डप्रकारविवरण
projectProject
taskCountinteger
conflictsarray of Conflict
अनुरोध
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"
}'
प्रतिक्रिया201 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

रीड एक्सेस वाली कुंजी

क्वेरी पैरामीटर

फ़ील्डप्रकारविवरण
localestring

रिटर्न करता है

200 OK Templates

फ़ील्डप्रकारविवरण
templatesarray of Template
अनुरोध
curl https://planitude.app/api/templates \
  -H "Authorization: Bearer $PLANITUDE_API_KEY"
प्रतिक्रिया200 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}

रीड एक्सेस वाली कुंजी

पाथ पैरामीटर

फ़ील्डप्रकारविवरण
projectId
आवश्यक
string (uuid)Project id.

रिटर्न करता है

200 OK Project

फ़ील्डप्रकारविवरण
projectProject
tasksarray of Task
dependenciesarray of Dependency
अनुरोध
curl https://planitude.app/api/projects/40be00e0-7e34-4f7a-864b-5cc986f575b8 \
  -H "Authorization: Bearer $PLANITUDE_API_KEY"
प्रतिक्रिया200 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}

राइट एक्सेस वाली कुंजी

पाथ पैरामीटर

फ़ील्डप्रकारविवरण
projectId
आवश्यक
string (uuid)Project id.

अनुरोध बॉडी

फ़ील्डप्रकारविवरण
namestring
descriptionstringnullable
startDatestring (date)
deadlinestring (date)nullable
currencystring
scheduleFromstring

इनमें से एक: forward, backward

colorstringnullable
archivedboolean

रिटर्न करता है

200 OK Updated

फ़ील्डप्रकारविवरण
projectProject
conflictsarray of Conflict
rescheduledbooleanThe schedule was recalculated (start date, calendar or direction changed).
अनुरोध
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"}'
प्रतिक्रिया200 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

रीड एक्सेस वाली कुंजी

पाथ पैरामीटर

फ़ील्डप्रकारविवरण
projectId
आवश्यक
string (uuid)Project id.

रिटर्न करता है

200 OK Baselines

फ़ील्डप्रकारविवरण
baselinesarray of Baseline
अनुरोध
curl https://planitude.app/api/projects/40be00e0-7e34-4f7a-864b-5cc986f575b8/baseline \
  -H "Authorization: Bearer $PLANITUDE_API_KEY"
प्रतिक्रिया200 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

राइट एक्सेस वाली कुंजी

पाथ पैरामीटर

फ़ील्डप्रकारविवरण
projectId
आवश्यक
string (uuid)Project id.

अनुरोध बॉडी

फ़ील्डप्रकारविवरण
namestring

रिटर्न करता है

201 Created Saved

फ़ील्डप्रकारविवरण
baselineBaseline
अनुरोध
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"}'
प्रतिक्रिया201 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 संदर्भ

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.

एट्रिब्यूट

फ़ील्डप्रकारविवरण
idstring (uuid)
numberintegerSequential number in the project, never reused.
keystringHuman key, e.g. CRON-12.
parentIdstring (uuid)nullable
namestring
typestring

इनमें से एक: summary, task, milestone

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

इनमें से एक: 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)nullable
deadlinestring (date-time)nullable
calendarIdstring (uuid)nullable
costFixednumber
notesstringnullable
colorstringnullable
wbsstringnullable
externalIdstringnullableYour identifier for this task in another system. Searchable with GET /tasks?externalId=.
startAtstring (date-time)nullableComputed start.
finishAtstring (date-time)nullableComputed finish.
isCriticalbooleanOn the critical path.
totalFloatMinintegernullableTotal float (slack) in working minutes.
earlyStartAtstring (date-time)nullable
lateFinishAtstring (date-time)nullable
actualStartAtstring (date-time)nullable
actualFinishAtstring (date-time)nullable
actualDurationMinintegernullable
remainingDurationMinintegernullable
manuallyScheduledboolean
levelingDelayMininteger
taskTypestring

इनमें से एक: fixed_units, fixed_duration, fixed_work, fixed_duration_and_units

effortDrivenboolean
durationOptimisticMinintegernullable
durationPessimisticMinintegernullable
projectIdstring (uuid)
completedbooleanprogressPct = 100.
assigneesarray of Assignee
urlstring (uri)Page of the task in the web app.
ऑब्जेक्ट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"
}

WriteResult

एट्रिब्यूट

फ़ील्डप्रकारविवरण
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
stats के फ़ील्ड दिखाएँ
फ़ील्डप्रकारविवरण
taskCountinteger
recomputedCountintegerTasks the scheduling engine recalculated.
savedCountintegerTasks whose stored values changed.
durationMsinteger
ऑब्जेक्टWriteResult
{
  "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

एट्रिब्यूट

फ़ील्डप्रकारविवरण
idstring (uuid)
taskIdstring (uuid)
userIdstring (uuid)
authorNamestring
authorAvatarUrlstringnullable
bodystring
mentionsarray of string
createdAtstring (date-time)
editedAtstring (date-time)nullable
ऑब्जेक्ट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
}

List or search tasks (paginated)

GET/api/projects/{projectId}/tasks

रीड एक्सेस वाली कुंजी

पाथ पैरामीटर

फ़ील्डप्रकारविवरण
projectId
आवश्यक
string (uuid)Project id.

क्वेरी पैरामीटर

फ़ील्डप्रकारविवरण
limitinteger1-500.

डिफ़ॉल्ट: 100

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

इनमें से एक: number, -number, -updatedAt

डिफ़ॉल्ट: number

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

इनमें से एक: true, false

रिटर्न करता है

200 OK A page of tasks

फ़ील्डप्रकारविवरण
tasksarray of Task
nextCursorstringnullable
अनुरोध
curl "https://planitude.app/api/projects/40be00e0-7e34-4f7a-864b-5cc986f575b8/tasks?externalId=crm-4711" \
  -H "Authorization: Bearer $PLANITUDE_API_KEY"
प्रतिक्रिया200 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

राइट एक्सेस वाली कुंजी

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.

पाथ पैरामीटर

फ़ील्डप्रकारविवरण
projectId
आवश्यक
string (uuid)Project id.

अनुरोध बॉडी

TaskCreate

फ़ील्डप्रकारविवरण
name
आवश्यक
string
parentIdstring (uuid)nullableParent (summary) task; null = top level.
afterTaskIdstring (uuid)nullableInsert after this sibling.
beforeTaskIdstring (uuid)nullableInsert before this sibling.
typestring

इनमें से एक: summary, task, milestone

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

इनमें से एक: 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)nullable
deadlinestring (date-time)nullable
calendarIdstring (uuid)nullable
costFixednumber
notesstringnullable
colorstringnullable
wbsstringnullable
externalIdstringnullableYour identifier for this task in another system. Searchable with GET /tasks?externalId=.

या ChangeSet

फ़ील्डप्रकारविवरण
createTasksarray of TaskCreate
updateTasksarray of any
createDependenciesarray of DependencyCreate
deleteDependencyIdsarray of string
fullRescheduleboolean

रिटर्न करता है

201 Created Task created

फ़ील्डप्रकारविवरण
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
stats के फ़ील्ड दिखाएँ
फ़ील्डप्रकारविवरण
taskCountinteger
recomputedCountintegerTasks the scheduling engine recalculated.
savedCountintegerTasks whose stored values changed.
durationMsinteger
अनुरोध
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"}'
प्रतिक्रिया201 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}

रीड एक्सेस वाली कुंजी

पाथ पैरामीटर

फ़ील्डप्रकारविवरण
projectId
आवश्यक
string (uuid)Project id.
taskId
आवश्यक
string (uuid)Task id.

रिटर्न करता है

200 OK The task

फ़ील्डप्रकारविवरण
taskTask
अनुरोध
curl https://planitude.app/api/projects/40be00e0-7e34-4f7a-864b-5cc986f575b8/tasks/4dbd104a-00cd-4035-8955-255f52ea586a \
  -H "Authorization: Bearer $PLANITUDE_API_KEY"
प्रतिक्रिया200 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}

राइट एक्सेस वाली कुंजी

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

पाथ पैरामीटर

फ़ील्डप्रकारविवरण
projectId
आवश्यक
string (uuid)Project id.
taskId
आवश्यक
string (uuid)Task id.

अनुरोध बॉडी

फ़ील्डप्रकारविवरण
namestring
typestring

इनमें से एक: summary, task, milestone

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

इनमें से एक: 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)nullable
deadlinestring (date-time)nullable
calendarIdstring (uuid)nullable
costFixednumber
notesstringnullable
colorstringnullable
wbsstringnullable
externalIdstringnullableYour identifier for this task in another system. Searchable with GET /tasks?externalId=.
placementobject
placement के फ़ील्ड दिखाएँ
फ़ील्डप्रकारविवरण
parentIdstring (uuid)nullableParent (summary) task; null = top level.
afterTaskIdstring (uuid)nullableInsert after this sibling.
beforeTaskIdstring (uuid)nullableInsert before this sibling.

रिटर्न करता है

200 OK Updated

फ़ील्डप्रकारविवरण
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
stats के फ़ील्ड दिखाएँ
फ़ील्डप्रकारविवरण
taskCountinteger
recomputedCountintegerTasks the scheduling engine recalculated.
savedCountintegerTasks whose stored values changed.
durationMsinteger
अनुरोध
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}'
प्रतिक्रिया200 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

रीड एक्सेस वाली कुंजी

पाथ पैरामीटर

फ़ील्डप्रकारविवरण
projectId
आवश्यक
string (uuid)Project id.
taskId
आवश्यक
string (uuid)Task id.

रिटर्न करता है

200 OK Comments

फ़ील्डप्रकारविवरण
commentsarray of Comment
अनुरोध
curl https://planitude.app/api/projects/40be00e0-7e34-4f7a-864b-5cc986f575b8/tasks/4dbd104a-00cd-4035-8955-255f52ea586a/comments \
  -H "Authorization: Bearer $PLANITUDE_API_KEY"
प्रतिक्रिया200 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

राइट एक्सेस वाली कुंजी

पाथ पैरामीटर

फ़ील्डप्रकारविवरण
projectId
आवश्यक
string (uuid)Project id.
taskId
आवश्यक
string (uuid)Task id.

अनुरोध बॉडी

फ़ील्डप्रकारविवरण
body
आवश्यक
stringPlain text.
mentionsarray of stringUser ids to notify.

रिटर्न करता है

201 Created Created

फ़ील्डप्रकारविवरण
commentComment
अनुरोध
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."}'
प्रतिक्रिया201 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 संदर्भ

Dependencies

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

Dependency

एट्रिब्यूट

फ़ील्डप्रकारविवरण
idstring (uuid)
predecessorIdstring (uuid)
successorIdstring (uuid)
typestring

इनमें से एक: FS, SS, FF, SF

lagMinintegerWorking minutes; negative = lead.
ऑब्जेक्टDependency
{
  "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

रीड एक्सेस वाली कुंजी

पाथ पैरामीटर

फ़ील्डप्रकारविवरण
projectId
आवश्यक
string (uuid)Project id.

रिटर्न करता है

200 OK Dependencies

फ़ील्डप्रकारविवरण
dependenciesarray of Dependency
अनुरोध
curl https://planitude.app/api/projects/40be00e0-7e34-4f7a-864b-5cc986f575b8/dependencies \
  -H "Authorization: Bearer $PLANITUDE_API_KEY"
प्रतिक्रिया200 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

राइट एक्सेस वाली कुंजी

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

पाथ पैरामीटर

फ़ील्डप्रकारविवरण
projectId
आवश्यक
string (uuid)Project id.

अनुरोध बॉडी

DependencyCreate

फ़ील्डप्रकारविवरण
predecessorId
आवश्यक
string (uuid)
successorId
आवश्यक
string (uuid)
typestring

इनमें से एक: FS, SS, FF, SF

डिफ़ॉल्ट: FS

lagMininteger

डिफ़ॉल्ट: 0

या dependencies

फ़ील्डप्रकारविवरण
dependencies
आवश्यक
array of DependencyCreate

रिटर्न करता है

201 Created Created

फ़ील्डप्रकारविवरण
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
stats के फ़ील्ड दिखाएँ
फ़ील्डप्रकारविवरण
taskCountinteger
recomputedCountintegerTasks the scheduling engine recalculated.
savedCountintegerTasks whose stored values changed.
durationMsinteger
अनुरोध
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
}'
प्रतिक्रिया201 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}

राइट एक्सेस वाली कुंजी

पाथ पैरामीटर

फ़ील्डप्रकारविवरण
projectId
आवश्यक
string (uuid)Project id.
dependencyId
आवश्यक
string (uuid)

रिटर्न करता है

200 OK Removed

फ़ील्डप्रकारविवरण
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
stats के फ़ील्ड दिखाएँ
फ़ील्डप्रकारविवरण
taskCountinteger
recomputedCountintegerTasks the scheduling engine recalculated.
savedCountintegerTasks whose stored values changed.
durationMsinteger
अनुरोध
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"
प्रतिक्रिया200 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 संदर्भ

People

Project members and task assignees.

Member

एट्रिब्यूट

फ़ील्डप्रकारविवरण
userIdstring (uuid)
namestring
emailstring
rolestringEffective role on the project.

इनमें से एक: owner, editor, viewer

directRolestringnullableRole granted on the project itself (null = only through the workspace).

इनमें से एक: owner, editor, viewer

inheritedbooleanAccess comes from the workspace.
resourceIdstring (uuid)nullableResource used when the person is assigned to tasks.
addedAtstring (date-time)
avatarUrlstringnullable
ऑब्जेक्टMember
{
  "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

एट्रिब्यूट

फ़ील्डप्रकारविवरण
resourceIdstring (uuid)
userIdstring (uuid)nullable
namestring
unitsPctinteger
ऑब्जेक्टAssignee
{
  "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

राइट एक्सेस वाली कुंजी

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.

पाथ पैरामीटर

फ़ील्डप्रकारविवरण
projectId
आवश्यक
string (uuid)Project id.
taskId
आवश्यक
string (uuid)Task id.

अनुरोध बॉडी

फ़ील्डप्रकारविवरण
userIds
आवश्यक
array of string
resourceIdsarray of string

रिटर्न करता है

200 OK Assignees saved

फ़ील्डप्रकारविवरण
taskIdstring (uuid)
assignmentsarray of object
assignments के फ़ील्ड दिखाएँ
फ़ील्डप्रकारविवरण
idstring (uuid)
taskIdstring (uuid)
resourceIdstring (uuid)
unitsPctinteger
workMininteger
resourcesarray of object
resources के फ़ील्ड दिखाएँ
फ़ील्डप्रकारविवरण
idstring (uuid)
userIdstring (uuid)nullable
namestring
kindstring

इनमें से एक: work, material, cost

emailstringnullable
costPerHournumber
costPerUsenumber
capacityPctinteger
calendarIdstring (uuid)nullable
colorstringnullable
avatarUrlstringnullable
needsRescheduleboolean
conflictsarray of Conflict
अनुरोध
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"]}'
प्रतिक्रिया200 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

रीड एक्सेस वाली कुंजी

पाथ पैरामीटर

फ़ील्डप्रकारविवरण
projectId
आवश्यक
string (uuid)Project id.

रिटर्न करता है

200 OK Members

फ़ील्डप्रकारविवरण
membersarray of Member
rolestring
अनुरोध
curl https://planitude.app/api/projects/40be00e0-7e34-4f7a-864b-5cc986f575b8/members \
  -H "Authorization: Bearer $PLANITUDE_API_KEY"
प्रतिक्रिया200 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 संदर्भ

Webhooks

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

Webhook

एट्रिब्यूट

फ़ील्डप्रकारविवरण
idstring (uuid)
workspaceIdstring (uuid)
workspaceNamestring
projectIdstring (uuid)nullablenull = every project of the workspace.
projectNamestringnullable
namestring
urlstring (uri)
eventsarray of string

इनमें से एक: 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
disabledReasonstringnullable

इनमें से एक: failures, gone, project_deleted, user

disabledAtstring (date-time)nullable
consecutiveFailuresinteger
viaApibooleanCreated with the API (REST hook) rather than from the profile.
createdByobjectnullable
createdBy के फ़ील्ड दिखाएँ
फ़ील्डप्रकारविवरण
idstring (uuid)
namestringnullable
createdAtstring (date-time)
updatedAtstring (date-time)
lastDeliveryAtstring (date-time)nullable
lastSuccessAtstring (date-time)nullable
ऑब्जेक्ट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"
}

Delivery

एट्रिब्यूट

फ़ील्डप्रकारविवरण
idstring (uuid)
eventIdstring (uuid)
eventTypestring
statusstring

इनमें से एक: pending, success, failed, cancelled

attemptsinteger
nextAttemptAtstring (date-time)nullable
lastAttemptAtstring (date-time)nullable
responseStatusintegernullable
responseExcerptstringnullable
errorstringnullable
durationMsintegernullable
manualboolean
createdAtstring (date-time)
ऑब्जेक्ट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"
}

Event

एट्रिब्यूट

फ़ील्डप्रकारविवरण
id
आवश्यक
string (uuid)Event id, also in the Planitude-Event-Id header: use it to deduplicate.
type
आवश्यक
string

इनमें से एक: 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
आवश्यक
string

इनमें से एक: 2026-10-01

createdAt
आवश्यक
string (date-time)
workspaceId
आवश्यक
string (uuid)
projectIdstring (uuid)nullable
actorobjectnullableWho made the change (null for system changes).
actor के फ़ील्ड दिखाएँ
फ़ील्डप्रकारविवरण
idstring (uuid)
namestringnullable
data
आवश्यक
object
ऑब्जेक्टEvent
{
  "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.

एट्रिब्यूट

फ़ील्डप्रकारविवरण
idstring (uuid)
workspaceIdstring (uuid)
keystring
namestring
descriptionstringnullable
startDatestring (date)
deadlinestring (date)nullable
currencystring
scheduleFromstring

इनमें से एक: forward, backward

colorstringnullable
archivedboolean
createdAtstring (date-time)
updatedAtstring (date-time)
urlstring (uri)
ऑब्जेक्टProject (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

रीड एक्सेस वाली कुंजी

क्वेरी पैरामीटर

फ़ील्डप्रकारविवरण
workspaceIdstring (uuid)
projectIdstring (uuid)

रिटर्न करता है

200 OK Subscriptions

फ़ील्डप्रकारविवरण
webhooksarray of Webhook
अनुरोध
curl https://planitude.app/api/webhooks \
  -H "Authorization: Bearer $PLANITUDE_API_KEY"
प्रतिक्रिया200 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

राइट एक्सेस वाली कुंजी

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.

अनुरोध बॉडी

फ़ील्डप्रकारविवरण
url
आवश्यक
string (uri)HTTPS endpoint that receives the events. Public addresses only.
events
आवश्यक
array of string* = all 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, *

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

रिटर्न करता है

201 Created Created

फ़ील्डप्रकारविवरण
webhookWebhook
secretstringwhsec_...
अनुरोध
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"
}'
प्रतिक्रिया201 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

सार्वजनिक, कुंजी की आवश्यकता नहीं

रिटर्न करता है

200 OK Events

फ़ील्डप्रकारविवरण
apiVersionstring
eventsarray of string
अनुरोध
curl https://planitude.app/api/webhooks/events
प्रतिक्रिया200 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}

रीड एक्सेस वाली कुंजी

पाथ पैरामीटर

फ़ील्डप्रकारविवरण
webhookId
आवश्यक
string (uuid)Webhook id.

रिटर्न करता है

200 OK Subscription

फ़ील्डप्रकारविवरण
webhookWebhook
अनुरोध
curl https://planitude.app/api/webhooks/1747ee7f-a395-4d3c-94b0-54b513d71d88 \
  -H "Authorization: Bearer $PLANITUDE_API_KEY"
प्रतिक्रिया200 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}

राइट एक्सेस वाली कुंजी

पाथ पैरामीटर

फ़ील्डप्रकारविवरण
webhookId
आवश्यक
string (uuid)Webhook id.

अनुरोध बॉडी

फ़ील्डप्रकारविवरण
namestring
urlstring (uri)
eventsarray of string
activebooleanfalse = pause; true = resume (also resets the failure counter).

रिटर्न करता है

200 OK Updated

फ़ील्डप्रकारविवरण
webhookWebhook
अनुरोध
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}'
प्रतिक्रिया200 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}

राइट एक्सेस वाली कुंजी

पाथ पैरामीटर

फ़ील्डप्रकारविवरण
webhookId
आवश्यक
string (uuid)Webhook id.

रिटर्न करता है

204 No Content Deleted

अनुरोध
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

रीड एक्सेस वाली कुंजी

पाथ पैरामीटर

फ़ील्डप्रकारविवरण
webhookId
आवश्यक
string (uuid)Webhook id.

क्वेरी पैरामीटर

फ़ील्डप्रकारविवरण
limitinteger1-100.

डिफ़ॉल्ट: 50

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

रिटर्न करता है

200 OK Deliveries

फ़ील्डप्रकारविवरण
deliveriesarray of Delivery
nextCursorstringnullable
अनुरोध
curl https://planitude.app/api/webhooks/1747ee7f-a395-4d3c-94b0-54b513d71d88/deliveries \
  -H "Authorization: Bearer $PLANITUDE_API_KEY"
प्रतिक्रिया200 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}

रीड एक्सेस वाली कुंजी

पाथ पैरामीटर

फ़ील्डप्रकारविवरण
webhookId
आवश्यक
string (uuid)Webhook id.
deliveryId
आवश्यक
string (uuid)

रिटर्न करता है

200 OK Payload

फ़ील्डप्रकारविवरण
payloadEvent
अनुरोध
curl https://planitude.app/api/webhooks/1747ee7f-a395-4d3c-94b0-54b513d71d88/deliveries/4b207161-80f9-40bb-bc3f-d8f70315be00 \
  -H "Authorization: Bearer $PLANITUDE_API_KEY"
प्रतिक्रिया200 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

राइट एक्सेस वाली कुंजी

पाथ पैरामीटर

फ़ील्डप्रकारविवरण
webhookId
आवश्यक
string (uuid)Webhook id.
deliveryId
आवश्यक
string (uuid)

रिटर्न करता है

202 Accepted Queued

फ़ील्डप्रकारविवरण
deliveryDelivery
अनुरोध
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"
प्रतिक्रिया202 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

राइट एक्सेस वाली कुंजी

पाथ पैरामीटर

फ़ील्डप्रकारविवरण
webhookId
आवश्यक
string (uuid)Webhook id.

रिटर्न करता है

202 Accepted Queued

फ़ील्डप्रकारविवरण
deliveryDelivery
अनुरोध
curl -X POST https://planitude.app/api/webhooks/1747ee7f-a395-4d3c-94b0-54b513d71d88/test \
  -H "Authorization: Bearer $PLANITUDE_API_KEY"
प्रतिक्रिया202 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

राइट एक्सेस वाली कुंजी

पाथ पैरामीटर

फ़ील्डप्रकारविवरण
webhookId
आवश्यक
string (uuid)Webhook id.

रिटर्न करता है

200 OK New secret (shown once)

फ़ील्डप्रकारविवरण
webhookWebhook
secretstring
अनुरोध
curl -X POST https://planitude.app/api/webhooks/1747ee7f-a395-4d3c-94b0-54b513d71d88/rotate-secret \
  -H "Authorization: Bearer $PLANITUDE_API_KEY"
प्रतिक्रिया200 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"
}

वेबहुक

वेबहुक

वेबहुक कुछ बदलते ही आपके एंडपॉइंट पर JSON बॉडी के साथ HTTPS POST भेजते हैं, चाहे बदलाव वेब ऐप, API, MCP सर्वर या इम्पोर्ट से आया हो। एक वेबहुक एक प्रोजेक्ट को, या वर्कस्पेस के सभी प्रोजेक्ट को (मालिक और एडमिन) कवर करता है।

इन्हें प्रोफ़ाइल → वेबहुक में या API से, REST हुक के रूप में बनाएँ: POST /api/webhooks से सब्सक्राइब करें, DELETE से अनसब्सक्राइब करें। साइनिंग सीक्रेट केवल एक बार दिखाया जाता है।

हर अनुरोध में ये हेडर होते हैं:

हेडरविवरण
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
अनुरोध
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"
}'
प्रतिक्रिया201 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"
}

इवेंट प्रकार

अलग-अलग इवेंट सब्सक्राइब करें, या सभी के लिए *। हर इवेंट का एन्वेलप समान होता है; data प्रकार के अनुसार बदलता है।

इवेंटविवरण
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.
उदाहरण पेलोड
{
  "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"
  }
}

हस्ताक्षर सत्यापित करें

हर अनुरोध पर HMAC-SHA256 और आपके वेबहुक के सीक्रेट से हस्ताक्षर होता है। Planitude-Signature हेडर में टाइमस्टैम्प t और हस्ताक्षर v1 होते हैं, जो t, एक डॉट और रॉ बॉडी पर गणना किए जाते हैं।

  1. रॉ बॉडी का उपयोग करें, किसी भी JSON पार्सिंग से पहले: दोबारा सीरियलाइज़ की गई बॉडी का हस्ताक्षर अलग होता है।
  2. HMAC की गणना करें और उसकी तुलना कॉन्स्टेंट टाइम में करें।
  3. उन अनुरोधों को अस्वीकार करें जिनका टाइमस्टैम्प आपकी घड़ी से 5 मिनट से अधिक दूर है: पकड़ा गया अनुरोध दोबारा नहीं चलाया जा सकता।
  4. जब चाहें सीक्रेट रोटेट करें: पुराना तुरंत काम करना बंद कर देता है।
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
// });

पुनः प्रयास और डिलीवरी

10 सेकंड के भीतर किसी भी 2xx से उत्तर दें और असली काम बाद में, क्यू में करें। रीडायरेक्ट फ़ॉलो नहीं किए जाते। त्रुटियों और टाइमआउट पर Planitude कुल अधिकतम 6 बार प्रयास करता है: तुरंत, फिर 1 min, 5 min, 30 min, 2 h, 12 h के बाद।

डिलीवरी कम से कम एक बार होती है और क्रमबद्ध नहीं होती। इवेंट आईडी सहेजें (Planitude-Event-Id, बॉडी में id भी) और जिन्हें आप प्रोसेस कर चुके हैं उन्हें छोड़ दें; createdAt से क्रमबद्ध करें।

लगातार 5 इवेंट के हर प्रयास में विफल होने पर वेबहुक अक्षम हो जाता है और उसके मालिक को ईमेल मिलता है। 410 Gone उत्तर उसे तुरंत अक्षम कर देता है। प्रोफ़ाइल से, या PATCH और active: true से उसे फिर चालू करें।

डिलीवरी लॉग (स्टेटस, HTTP कोड, उत्तर अंश, पेलोड, मैन्युअल पुनः भेजना) 30 दिनों तक रखा जाता है। गंतव्य के रूप में केवल सार्वजनिक पते स्वीकार किए जाते हैं।

पुनः प्रयास अनुसूची6 × POST
प्रयास 1   तुरंत
प्रयास 2   + 1 min
प्रयास 3   + 5 min
प्रयास 4   + 30 min
प्रयास 5   + 2 h
प्रयास 6   + 12 h

अपने एंडपॉइंट का परीक्षण करें

  1. टेस्ट एंडपॉइंट से, या प्रोफ़ाइल में Test बटन से webhook.ping इवेंट भेजें।
  2. अपने कंप्यूटर पर इवेंट प्राप्त करने के लिए, टनल (उदाहरण के लिए ngrok या Cloudflare Tunnel) से अपना लोकल सर्वर उपलब्ध कराएँ और उसका सार्वजनिक HTTPS पता सब्सक्राइब करें।
  3. स्टेटस, HTTP कोड और उत्तर देखने के लिए डिलीवरी लॉग खोलें, और एंडपॉइंट ठीक होने पर डिलीवरी दोबारा भेजें।
अनुरोध
curl -X POST https://planitude.app/api/webhooks/1747ee7f-a395-4d3c-94b0-54b513d71d88/test \
  -H "Authorization: Bearer $PLANITUDE_API_KEY"
प्रतिक्रिया202 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"
  }
}

AI और MCP

MCP सर्वर

Planitude एक MCP (Model Context Protocol) सर्वर है: AI असिस्टेंट और कोड एडिटर आपकी अनुमतियों के साथ प्रोजेक्ट पढ़ते हैं, क्रिटिकल पाथ और वर्कलोड का विश्लेषण करते हैं, और टास्क बनाते या बदलते हैं। वेब ऐप OAuth से कनेक्ट होते हैं (आप साइन इन करके एक्सेस की अनुमति देते हैं); कमांड-लाइन टूल और एडिटर API कुंजी का उपयोग करते हैं।

सर्वर URL

https://planitude.app/mcp

  • ChatGPTOAuth

    ChatGPT में Settings › Security and login खोलें और Developer mode चालू करें। सर्वर URL और OAuth प्रमाणीकरण के साथ ऐप बनाएँ, फिर Planitude में साइन इन करें और एक्सेस की अनुमति दें।

    आधिकारिक दस्तावेज़ीकरण ↗
  • ClaudeOAuth

    Customize › Connectors › Add custom connector खोलें, सर्वर URL पेस्ट करें और Connect चुनें: Planitude खुलेगा, आप साइन इन करके एक्सेस की अनुमति देंगे। यह claude.ai, Claude Desktop और मोबाइल ऐप में काम करता है।

    आधिकारिक दस्तावेज़ीकरण ↗
  • GeminiOAuth

    gemini.google.com पर Settings › Connected Apps खोलें, Add a custom app चुनें और सर्वर URL पेस्ट करें; फिर Planitude में साइन इन करें और एक्सेस की अनुमति दें।

    आधिकारिक दस्तावेज़ीकरण ↗
  • Claude CodeAPI कुंजी

    अपनी कुंजी को एनवायरनमेंट वेरिएबल में रखकर कमांड चलाएँ। हर प्रोजेक्ट में उपयोग के लिए --scope user जोड़ें और claude mcp list से जाँचें।

    आधिकारिक दस्तावेज़ीकरण ↗
  • CodexAPI कुंजी

    कुंजी को PLANITUDE_API_KEY में रखें और ब्लॉक को ~/.codex/config.toml में जोड़ें: यह CLI, ऐप और IDE एक्सटेंशन पर लागू होता है।

    आधिकारिक दस्तावेज़ीकरण ↗
  • CursorAPI कुंजी

    ब्लॉक को ~/.cursor/mcp.json (सभी प्रोजेक्ट) या .cursor/mcp.json (एक प्रोजेक्ट) में जोड़ें; Cursor कुंजी को एनवायरनमेंट से पढ़ता है।

    आधिकारिक दस्तावेज़ीकरण ↗
  • Visual Studio CodeAPI कुंजी

    वर्कस्पेस में .vscode/mcp.json जोड़ें: VS Code कुंजी एक बार माँगता है और उसे फ़ाइल से बाहर सुरक्षित रूप से सहेजता है।

    आधिकारिक दस्तावेज़ीकरण ↗
  • Gemini CLIAPI कुंजी

    अपनी कुंजी को एनवायरनमेंट वेरिएबल में रखकर कमांड चलाएँ, या ब्लॉक को ~/.gemini/settings.json में जोड़ें।

    आधिकारिक दस्तावेज़ीकरण ↗

टूल

सर्वर 29 टूल उपलब्ध कराता है, पढ़ने और विश्लेषण से लेकर सुरक्षित बदलावों तक। इनमें से कोई भी प्रोजेक्ट या टास्क नहीं हटाता।

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

चेंजलॉग

  1. OpenAPI दस्तावेज़ से तैयार नया डेवलपर दस्तावेज़ीकरण। OpenAPI दस्तावेज़ अब सदस्यों, टिप्पणियों, बेसलाइन, टेम्पलेट और असाइनी के लिए लौटाए जाने वाले हर फ़ील्ड का वर्णन करता है।

  2. API वर्ज़न 2026-10-01: हस्ताक्षरित आउटगोइंग वेबहुक, प्रलेखित सार्वजनिक REST API (OpenAPI 3.1), कर्सर पेजिनेशन और externalId से खोज।

  3. MCP सर्वर और API के लिए OAuth 2.1: ChatGPT, Claude और Gemini बिना कुंजी कॉपी किए कनेक्ट होते हैं।

  4. MCP सर्वर और रीड या रीड + राइट एक्सेस वाली व्यक्तिगत API कुंजियाँ।

विज्ञापन Planitude को निःशुल्क रखते हैं