Overview
Control Center provides full create, edit, and delete management for all Microsoft Places resources — buildings, floors, sections, rooms, workspaces, and desks — directly from the browser via the Microsoft Graph API.
Changes take effect immediately in Microsoft Places. No PowerShell or admin portal required.
Resource hierarchy
Resources are organised in a five-level tree matching the Microsoft Places model:
| Type | Description |
| Building | Top-level container. Must already exist in Entra ID — cannot be created here. |
| Floor | A floor within a building. Sort order controls display sequence. |
| Section | A named zone or area on a floor (e.g. "East Wing", "Pod A"). |
| Room | A bookable meeting room. Can sit on a floor directly, or inside a section. |
| Workspace / Desk Pool | A shared open-plan area. Supports drop-in, reservable, or unavailable modes. |
| Desk | An individual desk. Supports drop-in, reservable, assigned, or unavailable modes. |
Creating resources
- Click the + button beside any building, floor, or section to add a child resource.
- Fill in the panel fields and click Save. Required fields are marked with *.
- After saving, the tree refreshes silently in the background — the app stays open.
Editing & deleting
- Click the pencil icon on any row to open its edit panel.
- Modify fields and click Save. The tree updates in place — no loading screen.
- Click Delete at the bottom-left of the panel to permanently remove the resource.
Deletions are permanent and cannot be undone from this tool.
Bulk Import
Click Bulk Import in the toolbar to open the import modal. Two modes are available:
Single type
- Select a resource type and a parent (building → floor → section as required).
- Download the CSV template, fill it in, then upload the file.
- All rows are imported under the selected parent.
Multi-type
- Each CSV row defines its own type and full parent path by name (building, floor, section).
- Rows are processed in dependency order (floors first, then sections, then desks / rooms / workspaces) regardless of the order in your file — so you can create a floor and its desks in the same upload.
- Buildings must already exist — they cannot be created via this tool.
- Parent names are matched case-insensitively.
Multi-type CSV columns (19 total)
type, building, floor, section, displayName, label, sortOrder, capacity, nickname, teamsEnabled, audioDevice, videoDevice, displayDevice, mode, assignedEmail, reason, heightAdjustable, wheelchair, tags
Accepted type values
| Type | Also accepted as |
| floor | floors |
| section | sections |
| desk | desks |
| room | rooms |
| workspace | workspaces, space, spaces, deskpool, deskpools, desk pool, desk pools |
During import
- A progress bar with a shimmer animation shows while rows are being processed.
- The current item name is shown in the progress header.
- The active row is highlighted in the preview table and scrolls into view automatically.
- If the API returns a temporary error (rate limit or service unavailable), the row automatically retries up to 3 times — shown as ↻ retry 1 in the status column.
- Failed rows are marked ✗ with the error reason. The rest of the batch continues.
After import
- A ✓ X succeeded · ✗ Y failed summary appears below the progress bar.
- Click Download Log to export a CSV of every row with its status and any error message.
- Click Done (green) to close the modal. The tree refreshes silently in the background.
Filters
- Search — matches resource names, labels, and email addresses. Case-insensitive.
- Building / Floor / Section — cascading scope filters. Each narrows the options in the next dropdown.
- Type — filters to a specific resource type. Options update based on the selected scope.
- Expand / Collapse all — toggles the entire tree at once.
- Clear — resets all filters.
Permissions required
The signed-in user's account must have admin consent granted for the following Microsoft Graph permissions:
User.Read — identifies the signed-in user
Place.Read.All — reads all Places resources
Place.ReadWrite.All — creates, updates, and deletes Places resources
Place.ReadWrite.All requires a tenant administrator to grant consent — individual users cannot self-consent to this permission.
Troubleshooting
- Save returns an error — check the red message below the Save button. Common causes: missing required fields, or insufficient API permissions.
- Occasional ✗ errors during bulk import — the API sometimes returns transient errors under rapid requests. The import retries automatically up to 3 times per row. If a row still fails, re-run the import with just the failed rows.
- Resources not appearing after save — the tree dims briefly and refreshes automatically. If a new resource still doesn't appear, click Refresh — Places can take a few seconds to propagate changes.
- Admin Consent screen shown — a tenant administrator must visit the consent URL and grant
Place.ReadWrite.All before write operations will work.
- Multi-type import: "Building not found" — building names in the CSV must exactly match the display name in Microsoft Places (case-insensitive, but spelling must be exact).