
The Microsoft Graph Source connector integrates with the Microsoft Graph API to synchronize room calendar data from Microsoft 365 (Exchange Online) into the Mapped platform. It polls room mailbox calendars for booking events, creating a live view of meeting room usage across your organization.
The connector authenticates to Microsoft Graph using Azure AD OAuth 2.0 Client Credentials flow. An Azure AD App Registration with the appropriate Microsoft Graph API permissions is required.
To obtain the required credentials, follow Microsoft's Graph's instructions to Get access without a user with the permissions described below.
| Credential | Description | Required |
|---|---|---|
| Tenant ID | Azure AD tenant identifier (directory ID) | Yes |
| Client ID | Application (client) ID from the Azure AD registration | Yes |
| Client Secret | Client secret generated for the Azure AD app | Yes |
Required Microsoft Graph API Permissions (Application)
| Permission | Type | Description |
|---|---|---|
| Calendars.Read | Application | Read calendars in all mailboxes |
| Place.Read.All | Application | Read all company places (rooms) |
Credentials are validated on save by authenticating against the Microsoft identity platform. Invalid credentials will be rejected immediately.
After authentication, the connector fetches the list of rooms from the Microsoft Graph Places API. Each room can be mapped to a Mapped Space entity.
| Field | Description | Required |
|---|---|---|
| Building Name | Building name (auto-populated from room display name) | Yes |
| Building Address | Address of the building | No |
| Floor Name | Floor name | No |
| Floor Level | Floor level number | No |
| Space Name | Room display name (auto-populated) | Yes |
| Space Ref ID | Unique room identifier from Microsoft Graph | Yes |
Each room mapping also stores the room email address internally, which is used to query the calendar view for that room's mailbox.
The Calendar Sync action allows manual, on-demand synchronization of calendar events for a specific date range. This is useful for backfilling historical data or re-syncing a particular time window.
| Function | Interval | Description |
|---|---|---|
| Current Events | Every 30 minutes | Fetches events that were created or modified since the last successful poll |
| Future Events | Once per day | Fetches events scheduled within the next 30 days (configurable via futureEventsWindow setting) |
This connector creates the following entities in the Mapped graph:
| Microsoft Graph API | Mapped Entity | Description |
|---|---|---|
| Room (Place) | Space | A conference room or bookable space |
| Calendar View Events | SpaceBookingCalendar | A booking calendar associated with a room |
| Calendar Event | CalendarEvent | An individual booking/meeting event on the calendar |
Space
Represents a bookable room from Microsoft 365, created from the Place Mappings configuration.
Key Fields
| GraphQL Field | Description |
|---|---|
| name | Room display name |
| exactType | Subclass of Space (e.g. Room) |
| mappingKey | Unique key from place mapping |
| identities | External identity URN |
SpaceBookingCalendar
Represents the booking calendar for a specific room. One calendar is created per mapped room.
Key Fields
| GraphQL Field | Description |
|---|---|
| name | Calendar for {room name} |
| mappingKey | Derived from the parent Space mapping key |
| hasCalendarEvent | List of CalendarEvent entities on this calendar |
| isCalendarOf | The Space this calendar belongs to |
CalendarEvent
Represents an individual meeting or booking on a room calendar. Cancelled events are automatically excluded.
Key Fields
| GraphQL Field | Description |
|---|---|
| name | Event subject/title |
| startTime | Event start time (ISO 8601) |
| endTime | Event end time (ISO 8601) |
| hasLocation | The Space where the event takes place |
| identities | External identity URN based on the iCalUId |
| mappingKey | Unique key derived from the event's iCalUId |
When an event is moved to a different room, the connector automatically updates the hasLocation relationship to reflect the new room assignment.
Query Spaces with their Calendars and Events
Request ResponseCopy1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24{ spaces { id name exactType hasCalendar { ... on SpaceBookingCalendar { id name hasCalendarEvent { id name startTime endTime hasLocation { id name exactType } } } } } }
Query CalendarEvents with location
Request ResponseCopy1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24{ calendarEvents { id name startTime endTime hasLocation { ... on Space { id name exactType floor { name } } } identities { ... on ExternalIdentity { value scope } } } }
Query a specific Space's booking calendar
Request ResponseCopy1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19{ spaces(filter: {id: {eq: "your-Space-Id"}}) { id name hasCalendar { ... on SpaceBookingCalendar { id name exactType hasCalendarEvent { id name startTime endTime } } } } }
