Share via

Operations on Planner Tasks via Microsoft Graph API Distort Planner UI (v1.0 & Beta)

Kaivalyamani Tripathi 0 Reputation points
2026-06-09T07:03:40.1133333+00:00

We are experiencing an issue when performing operations using Microsoft Graph API, where these operations appear to be breaking the UI.

The issue consistently occurs when using a Service Principal (app-only authentication / client credentials flow). All required permissions are granted, and the API operations themselves execute successfully without any errors.

User's image However, after performing operations via Graph API, the UI in both Microsoft Teams (Planner) and the Android Planner app fails to load data correctly or becomes unstable.

User's imageUser's image

This issue is observed across both:

  • Graph API v1.0
  • Graph API beta

This suggests that the problem is likely not version-specific.

Observed Behavior

  • API calls (create/update/delete) succeed with valid responses
  • Tasks are correctly created, updated, or deleted via API
  • However, immediately after these operations:
    • Teams Planner UI fails to render properly
      • Android Planner app is unable to load tasks
      • Interestingly, if we manually update the same task via UI (e.g., change status), the UI starts working correctly again
  • But performing another operation via API causes the same issue to reoccur

Questions

We would like to understand:

  1. Is this a known limitation when using app-only (Service Principal) authentication with Planner APIs?
  2. Are there mandatory fields or metadata (e.g., auditing fields) that must be explicitly set when using app-only flows?
  3. Could this be due to:
    • Backend synchronization or propagation delays
      • Incomplete metadata population by Graph API
        • Differences in how UI clients interpret app-created tasks
  4. Is this a known bug/regression in Planner/Graph API?

Key Observation

We compared the JSON payloads of:

  1. A task created from Teams UI
  2. A task created via Graph API (Service Principal)

We could not find major structural differences, except in some auditing-related fields and metadata.

{
      "id": "[Moderator note: personal info removed]",
      "title": "From teams", //Task created from teams
      "planId": "[Moderator note: personal info removed]",
      "bucketId": "[Moderator note: personal info removed]",
      "priority": 5,
      "percentComplete": 0,
      "createdDateTime": "2026-06-08T09:50:52+00:00",
      "dueDateTime": "2026-06-22T10:00:00+00:00",
      "startDateTime": null,
      "completedDateTime": null,
      "lastModifiedDateTime": "2026-06-08T09:51:18+00:00",
      "hasDescription": true,
      "hasChat": false,
      "isArchived": false,
      "isOnMyDay": false,
      "isOnMyDayLastModifiedDate": null,
      "orderHint": "[Moderator note: personal info removed]",
      "assigneePriority": "",
      "activeChecklistItemCount": 0,
      "checklistItemCount": 0,
      "referenceCount": 0,
      "previewType": "Description",
      "conversationThreadId": null,
      "specifiedCompletionRequirements": "None",
      "odataType": null,
      "creationSource": null,
      "details": null,
      "assignedToTaskBoardFormat": null,
      "bucketTaskBoardFormat": null,
      "progressTaskBoardFormat": null,
      "archivalInfo": null,
      "messages": null,
      "createdBy": {
        "user": {
          "id": "<user-object-id>",
          "displayName": null,
          "odataType": null,
          "additionalData": {}
        },
        "application": {
          "id": "[Moderator note: personal info removed]", //most likely planner service principal
          "displayName": null,
          "odataType": null,
          "additionalData": {}
        },
        "device": null,
        "additionalData": {}
      },
      "completedBy": null,
      "lastModifiedBy": {
        "user": {
          "id": "<user-object-id>",
          "displayName": null,
          "odataType": null,
          "additionalData": {}
        },
        "application": {
          "id": "[Moderator note: personal info removed]",
          "displayName": null,
          "odataType": null,
          "additionalData": {}
        },
        "device": null,
        "additionalData": {}
      },
      "appliedCategories": {
        "additionalData": {
          "category1": true
        }
      },
      "assignments": {
        "additionalData": {
          "<assigned-user-object-id>": "{UntypedObject}"
        }
      },
      "recurrence": {
        "occurrenceId": 1,
        "seriesId": "[Moderator note: personal info removed]",
        "previousInSeriesTaskId": null,
        "nextInSeriesTaskId": null,
        "additionalData": {},
        "schedule": {
          "nextOccurrenceDateTime": "2026-06-24T10:00:00+00:00",
          "patternStartDateTime": "2026-06-22T10:00:00+00:00",
          "odataType": null,
          "additionalData": {},
          "pattern": {
            "type": "Weekly",
            "interval": 1,
            "daysOfWeek": ["Monday", "Wednesday", "Friday"],
            "dayOfMonth": 0,
            "month": 0,
            "firstDayOfWeek": "Sunday",
            "index": "First",
            "additionalData": {}
          }
        }
      }
{
      "id": "[Moderator note: personal info removed]",
      "title": "Service Task 5", // Created from API
      "planId": "[Moderator note: personal info removed]",
      "bucketId": "[Moderator note: personal info removed]",
      "priority": 1,
      "percentComplete": 0,
      "createdDateTime": "2026-06-08T09:52:26+00:00",
      "dueDateTime": "2026-06-22T10:01:14+00:00",
      "startDateTime": null,
      "completedDateTime": null,
      "lastModifiedDateTime": "0001-01-01T00:00:00+00:00",
      "hasDescription": true,
      "hasChat": false,
      "isArchived": false,
      "isOnMyDay": false,
      "isOnMyDayLastModifiedDate": null,
      "orderHint": "[Moderator note: personal info removed]",
      "assigneePriority": "",
      "activeChecklistItemCount": 0,
      "checklistItemCount": 0,
      "referenceCount": 0,
      "previewType": "Automatic",
      "conversationThreadId": null,
      "specifiedCompletionRequirements": "None",
      "odataType": null,
      "creationSource": null,
      "details": null,
      "assignedToTaskBoardFormat": null,
      "bucketTaskBoardFormat": null,
      "progressTaskBoardFormat": null,
      "archivalInfo": null,
      "messages": null,
      "createdBy": {
        "user": null,
        "application": {
          "id": <object-id-of-our-sp>,
          "displayName": null,
          "odataType": null,
          "additionalData": {}
        },
        "device": null,
        "additionalData": {}
      },
      "completedBy": null,
      "lastModifiedBy": null,
      "appliedCategories": {
        "additionalData": {
          "category1": true
        }
      },
      "assignments": {
        "additionalData": {
          "<user-id-to-which-task-was-assigned>": "{UntypedObject}"
        }
      },
      "recurrence": {
        "occurrenceId": 2,
        "seriesId": [Moderator note: personal info removed]",
        "previousInSeriesTaskId": "[Moderator note: personal info removed]",
        "nextInSeriesTaskId": null,
        "additionalData": {},
        "schedule": {
          "nextOccurrenceDateTime": "2026-06-24T10:01:14+00:00",
          "patternStartDateTime": "2026-06-20T10:01:14+00:00",
          "odataType": null,
          "additionalData": {},
          "pattern": {
            "type": "Weekly",
            "interval": 1,
            "daysOfWeek": ["Monday", "Wednesday", "Friday"],
            "dayOfMonth": 0,
            "month": 0,
            "firstDayOfWeek": "Monday",
            "index": "First",
            "additionalData": {}
          }
        }
      },
      "@odata.etag": "[Moderator note: personal info removed]
    }

Environment

  • Authentication: Service Principal (Client Credentials Flow)
  • API Versions: v1.0 and beta
  • Workload: Planner (Tasks)
  • Clients Impacted:
    • Microsoft Teams (Planner tab)
    • Android Planner app

SDK Details

  • Framework: .NET 8
  • V1 SDK Used: Microsoft.Graph Version="5.98.0"
  • Beta SDK Used: Microsoft.Graph.Beta Version="5.131.0-preview" and "6.0.0-preview"
Microsoft Teams | Development
Microsoft Teams | Development

Building, integrating, or customizing apps and workflows within Microsoft Teams using developer tools and APIs


1 answer

Sort by: Most helpful
  1. Vergil-V 14,780 Reputation points Microsoft External Staff Moderator
    2026-06-09T09:16:49.7533333+00:00

    Please note that our forum is a public platform, and we will modify your question to hide your personal information in the description. Kindly ensure that you hide any personal or organizational information the next time you post an error or other details to protect personal data. 

     Hi Kaivalyamani Tripathi

    Thank you for sharing the details of your scenario, and I appreciate the level of information you have provided. It helps to better understand your situation and review it more carefully. 

    From my testing, I attempted to replicate your scenario using both delegated and application permissions when creating Planner tasks through the POST /planner/tasks endpoint. In my case, I was not able to reproduce the behavior you described. 

    In my environment, I am using a basic plan, and I did not observe the lastModifiedBy output as shown in your description. 

    At this time, I have not found any official documentation that directly addresses this behavior. Given this, I would recommend reaching out to the Microsoft Graph support team through Microsoft Graph | Support to obtain further and more official insight. 

    I hope this provides additional insight. 


    Note: Please follow the steps in our documentation to enable e-mail notifications if you want to receive the related email notification for this thread.

    Was this answer helpful?

    0 comments No comments

Your answer

Answers can be marked as 'Accepted' by the question author and 'Recommended' by moderators, which helps users know the answer solved the author's problem.