An API that connects multiple Microsoft services, enabling data access and automation across platforms
Microsoft Graph all-day events return incorrect UTC start/end – organizer timezone not available
We are using Microsoft Graph API to fetch Outlook calendar events.
calendarEvent = (await graphServiceClient.Users[eventResquest.UserId].Events.GetAsync((requestConfiguration) => { requestConfiguration.Headers.Add("Prefer", "outlook.timezone="UTC""); requestConfiguration.QueryParameters.Filter = filter; })).Value.FirstOrDefault();
Normal (non all-day) events work correctly, but we are facing a consistent issue with all-day events.
Scenario:
- Organizer mailbox timezone: IST (UTC+05:30)
- User creates:
- Normal meeting: 10:00–10:30 IST
- All-day event on 9 Feb
- Events are fetched using: Prefer: outlook.timezone="UTC"
Graph API response:
Normal event (expected and correct):
start:
{
"dateTime": "2026-02-09T04:30:00Z",
"timeZone": "UTC"
}
All-day event:
{
"isAllDay": true,
"start": {
"dateTime": "2026-02-08T00:00:00Z",
"timeZone": "UTC"
``` },
"end": {
```yaml
"dateTime": "2026-02-09T00:00:00Z",
"timeZone": "UTC"
``` },
"originalStartTimeZone": "UTC",
"originalEndTimeZone": "UTC"
}
**Problem:**
- For all-day events, Microsoft Graph always returns start/end as 00:00 UTC
- Prefer: outlook.timezone header is ignored
- originalStartTimeZone/originalEndTimeZone are also returned as "UTC"
- Organizer timezone is NOT available in the event payload
**Because of this:**
- It is impossible to determine the actual local calendar day of the all-day event
- Applications that store everything in UTC cannot correctly normalize all-day events
- Date shifts occur unless custom logic is applied
- The only workaround appears to be calling /users/{id}/mailboxSettings, which is user-dependent and requires additional permission
**Questions:**
1) Is this all-day event behavior by design in Microsoft Graph?
2) Is there any event-level or non user-dependent way to determine the organizer’s timezone?
3) Is /users/{id}/mailboxSettings the ONLY supported way to get organizer timezone?
4) Are there any official best practices from Microsoft for handling all-day events correctly without relying on user mailbox settings?
We understand that all-day events are date-based, but without organizer timezone information in the event object, correct UTC normalization is unreliable.
Any official clarification or guidance would be appreciated.