المطوّرون

ابنِ مع Planitude

واجهة REST API وخطافات ويب موقّعة وخادم MCP: أبقِ أنظمتك متزامنة مع الخطة، وتفاعل مع كل تغيير، ودع مساعد الذكاء الاصطناعي يعمل على مشاريعك.

الشيفرة وأسماء الحقول والمرجع التقني بالإنجليزية، كمعظم وثائق واجهات API.

عنوان URL الأساسي: https://planitude.app

الطلبات والاستجابات بصيغة JSON عبر HTTPS. المدد والتأخيرات بـدقائق العمل (يوم من 8 ساعات يساوي 480)، واللحظات بصيغة 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"
      ]
    }
  }
}

المصادقة

صادِق على كل طلب بمفتاح API شخصي في ترويسة Authorization، كرمز حامل (bearer token). المفاتيح شخصية: تعمل باسمك، بدورك في كل مشروع، ولا تتجاوزه أبدًا. يمكنك تقييد المفتاح بمساحة عمل واحدة، وتحديد تاريخ انتهاء له، وإلغاؤه في أي وقت؛ ويُسجَّل كل استدعاء بجانب المفتاح.

النطاقات

النطاقيتيح
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 من طلبات الكتابة. عند تجاوز الحد تحصل على 429 rate_limited مع ترويسة Retry-After، بالثواني.

انتظر 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 في كل حدث وinfo.version في وثيقة OpenAPI.

ضمن الإصدار الواحد نضيف فقط: نقاط نهاية جديدة، وحقولًا اختيارية جديدة، وأنواع أحداث جديدة. ولا تُزال الحقول ولا يتغير نوعها دون إصدار جديد، لذا تجاهل الحقول التي لا تعرفها.

الطلب
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)
namestringيقبل القيمة الفارغة
avatarUrlstringيقبل القيمة الفارغة
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
descriptionstringيقبل القيمة الفارغة
startDatestring (date)
calendarIdstring (uuid)يقبل القيمة الفارغة
currencystring
scheduleFromstring

إحدى القيم: forward, backward

deadlinestring (date)يقبل القيمة الفارغة
colorstringيقبل القيمة الفارغة
settingsobject
archivedAtstring (date-time)يقبل القيمة الفارغة
createdBystring (uuid)يقبل القيمة الفارغة
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
descriptionstringيقبل القيمة الفارغة
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
indexintegerيقبل القيمة الفارغةNumbered MS Project baseline (1-10); null for the main baseline and the ones you name.
capturedAtstring (date-time)
capturedBystring (uuid)يقبل القيمة الفارغة
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.
descriptionstringيقبل القيمة الفارغة
startDatestring (date)
deadlinestring (date)يقبل القيمة الفارغة
currencystring
scheduleFromstring

إحدى القيم: forward, backward

colorstringيقبل القيمة الفارغة

القيمة المُعادة

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
descriptionstringيقبل القيمة الفارغة
startDatestring (date)
deadlinestring (date)يقبل القيمة الفارغة
currencystring
scheduleFromstring

إحدى القيم: forward, backward

colorstringيقبل القيمة الفارغة
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)يقبل القيمة الفارغة
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)يقبل القيمة الفارغة
deadlinestring (date-time)يقبل القيمة الفارغة
calendarIdstring (uuid)يقبل القيمة الفارغة
costFixednumber
notesstringيقبل القيمة الفارغة
colorstringيقبل القيمة الفارغة
wbsstringيقبل القيمة الفارغة
externalIdstringيقبل القيمة الفارغةYour identifier for this task in another system. Searchable with GET /tasks?externalId=.
startAtstring (date-time)يقبل القيمة الفارغةComputed start.
finishAtstring (date-time)يقبل القيمة الفارغةComputed finish.
isCriticalbooleanOn the critical path.
totalFloatMinintegerيقبل القيمة الفارغةTotal float (slack) in working minutes.
earlyStartAtstring (date-time)يقبل القيمة الفارغة
lateFinishAtstring (date-time)يقبل القيمة الفارغة
actualStartAtstring (date-time)يقبل القيمة الفارغة
actualFinishAtstring (date-time)يقبل القيمة الفارغة
actualDurationMinintegerيقبل القيمة الفارغة
remainingDurationMinintegerيقبل القيمة الفارغة
manuallyScheduledboolean
levelingDelayMininteger
taskTypestring

إحدى القيم: fixed_units, fixed_duration, fixed_work, fixed_duration_and_units

effortDrivenboolean
durationOptimisticMinintegerيقبل القيمة الفارغة
durationPessimisticMinintegerيقبل القيمة الفارغة
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
authorAvatarUrlstringيقبل القيمة الفارغة
bodystring
mentionsarray of string
createdAtstring (date-time)
editedAtstring (date-time)يقبل القيمة الفارغة
الكائنات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
nextCursorstringيقبل القيمة الفارغة
الطلب
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)يقبل القيمة الفارغةParent (summary) task; null = top level.
afterTaskIdstring (uuid)يقبل القيمة الفارغةInsert after this sibling.
beforeTaskIdstring (uuid)يقبل القيمة الفارغةInsert 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)يقبل القيمة الفارغة
deadlinestring (date-time)يقبل القيمة الفارغة
calendarIdstring (uuid)يقبل القيمة الفارغة
costFixednumber
notesstringيقبل القيمة الفارغة
colorstringيقبل القيمة الفارغة
wbsstringيقبل القيمة الفارغة
externalIdstringيقبل القيمة الفارغةYour 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)يقبل القيمة الفارغة
deadlinestring (date-time)يقبل القيمة الفارغة
calendarIdstring (uuid)يقبل القيمة الفارغة
costFixednumber
notesstringيقبل القيمة الفارغة
colorstringيقبل القيمة الفارغة
wbsstringيقبل القيمة الفارغة
externalIdstringيقبل القيمة الفارغةYour identifier for this task in another system. Searchable with GET /tasks?externalId=.
placementobject
عرض حقول placement
الحقلالنوعالوصف
parentIdstring (uuid)يقبل القيمة الفارغةParent (summary) task; null = top level.
afterTaskIdstring (uuid)يقبل القيمة الفارغةInsert after this sibling.
beforeTaskIdstring (uuid)يقبل القيمة الفارغةInsert 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

directRolestringيقبل القيمة الفارغةRole granted on the project itself (null = only through the workspace).

إحدى القيم: owner, editor, viewer

inheritedbooleanAccess comes from the workspace.
resourceIdstring (uuid)يقبل القيمة الفارغةResource used when the person is assigned to tasks.
addedAtstring (date-time)
avatarUrlstringيقبل القيمة الفارغة
الكائنات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)يقبل القيمة الفارغة
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)يقبل القيمة الفارغة
namestring
kindstring

إحدى القيم: work, material, cost

emailstringيقبل القيمة الفارغة
costPerHournumber
costPerUsenumber
capacityPctinteger
calendarIdstring (uuid)يقبل القيمة الفارغة
colorstringيقبل القيمة الفارغة
avatarUrlstringيقبل القيمة الفارغة
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)يقبل القيمة الفارغةnull = every project of the workspace.
projectNamestringيقبل القيمة الفارغة
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
disabledReasonstringيقبل القيمة الفارغة

إحدى القيم: failures, gone, project_deleted, user

disabledAtstring (date-time)يقبل القيمة الفارغة
consecutiveFailuresinteger
viaApibooleanCreated with the API (REST hook) rather than from the profile.
createdByobjectيقبل القيمة الفارغة
عرض حقول createdBy
الحقلالنوعالوصف
idstring (uuid)
namestringيقبل القيمة الفارغة
createdAtstring (date-time)
updatedAtstring (date-time)
lastDeliveryAtstring (date-time)يقبل القيمة الفارغة
lastSuccessAtstring (date-time)يقبل القيمة الفارغة
الكائنات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)يقبل القيمة الفارغة
lastAttemptAtstring (date-time)يقبل القيمة الفارغة
responseStatusintegerيقبل القيمة الفارغة
responseExcerptstringيقبل القيمة الفارغة
errorstringيقبل القيمة الفارغة
durationMsintegerيقبل القيمة الفارغة
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)يقبل القيمة الفارغة
actorobjectيقبل القيمة الفارغةWho made the change (null for system changes).
عرض حقول actor
الحقلالنوعالوصف
idstring (uuid)
namestringيقبل القيمة الفارغة
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
descriptionstringيقبل القيمة الفارغة
startDatestring (date)
deadlinestring (date)يقبل القيمة الفارغة
currencystring
scheduleFromstring

إحدى القيم: forward, backward

colorstringيقبل القيمة الفارغة
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
nextCursorstringيقبل القيمة الفارغة
الطلب
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"
}

خطافات الويب

خطافات الويب

ترسل خطافات الويب طلب HTTPS من نوع POST بنص JSON إلى نقطة النهاية لديك بمجرد حدوث تغيير، سواء جاء من تطبيق الويب أو واجهة 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
// });

إعادة المحاولة والتسليم

أجب بأي رمز 2xx خلال 10 ثانية ونفّذ العمل الفعلي لاحقًا، في قائمة انتظار. لا تُتبَّع عمليات إعادة التوجيه. عند الأخطاء وانتهاء المهلة يحاول 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. أرسل حدث 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"
  }
}

الذكاء الاصطناعي وMCP

خادم MCP

Planitude هو خادم MCP (بروتوكول سياق النموذج): يقرأ مساعدو الذكاء الاصطناعي ومحررات الشيفرة المشاريع، ويحللون المسار الحرج وعبء العمل، وينشئون المهام أو يعدّلونها، بصلاحياتك أنت. تتصل تطبيقات الويب عبر OAuth (تسجّل الدخول وتمنح الإذن)؛ وتستخدم أدوات سطر الأوامر والمحررات مفتاح API.

عنوان URL للخادم

https://planitude.app/mcp

  • ChatGPTOAuth

    في ChatGPT افتح الإعدادات › الأمان وتسجيل الدخول وفعّل وضع المطوّر. أنشئ تطبيقًا بعنوان URL للخادم ومصادقة OAuth، ثم سجّل الدخول إلى Planitude وامنح الإذن.

    الوثائق الرسمية ↗
  • ClaudeOAuth

    افتح تخصيص › الموصّلات › إضافة موصّل مخصص، والصق عنوان URL للخادم واختر اتصال: يفتح Planitude، فتسجّل الدخول وتمنح الإذن. يعمل في claude.ai وClaude Desktop وتطبيق الهاتف.

    الوثائق الرسمية ↗
  • GeminiOAuth

    في gemini.google.com افتح الإعدادات › التطبيقات المتصلة، واختر إضافة تطبيق مخصص والصق عنوان URL للخادم؛ ثم سجّل الدخول إلى Planitude وامنح الإذن.

    الوثائق الرسمية ↗
  • Claude Codeمفتاح API

    نفّذ الأمر مع مفتاحك في متغير بيئة. أضف --scope user لاستخدامه في كل مشروع، وتحقق عبر claude mcp list.

    الوثائق الرسمية ↗
  • Codexمفتاح API

    ضع المفتاح في PLANITUDE_API_KEY وأضف الكتلة إلى ~/.codex/config.toml: ويسري ذلك على واجهة سطر الأوامر والتطبيق وامتداد بيئة التطوير.

    الوثائق الرسمية ↗
  • Cursorمفتاح API

    أضف الكتلة إلى ~/.cursor/mcp.json (لجميع المشاريع) أو .cursor/mcp.json (لمشروع واحد)؛ ويقرأ Cursor المفتاح من البيئة.

    الوثائق الرسمية ↗
  • Visual Studio Codeمفتاح API

    أضف .vscode/mcp.json إلى مساحة العمل: يطلب VS Code المفتاح مرة واحدة ويخزّنه بأمان، خارج الملف.

    الوثائق الرسمية ↗
  • Gemini CLIمفتاح API

    نفّذ الأمر مع مفتاحك في متغير بيئة، أو أضف الكتلة إلى ~/.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. OAuth 2.1 لخادم MCP وواجهة API: يتصل ChatGPT وClaude وGemini دون نسخ مفتاح.

  4. خادم MCP ومفاتيح API شخصية بصلاحية القراءة أو القراءة والكتابة.

الإعلانات تُبقي Planitude مجانيًا