Skip to content

Commit b6be77f

Browse files
authored
Merge pull request #60 from InteractionDesignFoundation/docs/outlook-web-params
Update Outlook Web parameters from live testing
2 parents 50fb5dd + 7e66d71 commit b6be77f

1 file changed

Lines changed: 112 additions & 34 deletions

File tree

services/outlook-web.md

Lines changed: 112 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,9 @@ Outlook Live:
1010
Office 365:
1111
`https://outlook.office.com/calendar/deeplink/compose`
1212

13+
An account index may be inserted before `deeplink`, for example
14+
`https://outlook.live.com/calendar/0/deeplink/compose`. Both forms behave identically.
15+
1316
### Example
1417

1518
Outlook Live:
@@ -18,6 +21,24 @@ Outlook Live:
1821
Office 365:
1922
`https://outlook.office.com/calendar/deeplink/compose?path=/calendar/action/compose&rru=addevent&startdt=2023-08-09T19:30:00Z&enddt=2023-08-09T22:30:00Z&subject=Birthday&body=With%20clowns%20and%20stuff&location=North%20Pole`
2023

24+
## How this was verified
25+
26+
Unlike Google Calendar, the Outlook web app does not parse the deep link in the browser.
27+
None of the parameter names appear in the OWA JavaScript chunks that the compose page loads,
28+
and the query string disappears from the address bar once the compose form is rendered,
29+
so the mapping happens on the server.
30+
31+
That means the list below comes from replaying parameters against the live compose form and
32+
observing the result, not from reading a parser.
33+
34+
Each parameter carries one of three confidence markers:
35+
36+
* **verified**: the parameter visibly changed the compose form.
37+
* **no effect**: the parameter was replayed and the form did not change.
38+
* **not observable**: the parameter may work, but the compose form gives no way to tell.
39+
40+
Last check on `outlook.live.com`: 2026-08-19. The Office 365 host was not re-tested.
41+
2142
## Parameters
2243

2344
### path
@@ -27,6 +48,8 @@ format: string
2748

2849
example: `path=/calendar/action/compose`
2950

51+
confidence: verified
52+
3053
description: internal application path.
3154

3255
### rru
@@ -36,6 +59,8 @@ format: string (`addevent`)
3659

3760
example: `rru=addevent`
3861

62+
confidence: verified
63+
3964
description: action name.
4065

4166
### startdt
@@ -45,8 +70,10 @@ format: datetime (`YYYY-MM-DDTHH:mm:SSZ`) or date (`YYYY-MM-DD`, for all-day eve
4570

4671
example: `startdt=2020-12-31T19:30:00Z`
4772

48-
description: The start date for the event.
49-
You can omit trailing `Z`, in this case script assumes that time specified in current user's timezone.
73+
confidence: verified
74+
75+
description: the start date for the event.
76+
You can omit the trailing `Z`, in which case the value is read in the current user's timezone.
5077
To specify all-day events use the `YYYY-MM-DD` format.
5178

5279
### enddt
@@ -56,7 +83,9 @@ format: datetime (`YYYY-MM-DDTHH:mm:SSZ`) or date (`YYYY-MM-DD`, for all-day eve
5683

5784
example: `enddt=2020-12-31T22:30:00Z`
5885

59-
description: The end time of the event, format as for `startdt`.
86+
confidence: verified
87+
88+
description: the end time of the event, format as for `startdt`.
6089

6190
### subject
6291
required: yes
@@ -65,7 +94,9 @@ format: string
6594

6695
example: `subject=Birthday`
6796

68-
description: event title.
97+
confidence: verified
98+
99+
description: event title. It also becomes the browser tab title.
69100

70101
### allday
71102
required: no
@@ -74,16 +105,23 @@ format: boolean (`true`/`false`)
74105

75106
example: `allday=true`
76107

77-
description: whether event is all-day or not.
108+
confidence: verified
109+
110+
description: whether the event is all-day or not.
111+
`allday=true` wins over the time part of `startdt` and `enddt`, so a full datetime range still collapses into an all-day event.
112+
All-day events also default to "Free" availability.
78113

79114
### body
80115
required: no
81116

82-
format: text
117+
format: text or HTML
83118

84119
example: `body=With clowns and stuff`
85120

86-
description: description of your event
121+
confidence: verified
122+
123+
description: description of your event.
124+
HTML is accepted and rendered, so `body=%3Cb%3Ebold%3C%2Fb%3E` produces bold text and an `<a href="...">` produces a real link.
87125

88126
### location
89127
required: no
@@ -92,69 +130,109 @@ format: string
92130

93131
example: `location=North Pole`
94132

95-
description: set the location of the event.
133+
confidence: verified
134+
135+
description: set the location of the event. The value is added as a free-text location entry, it is not resolved against Bing Maps.
96136

97137
### online
98138
required: no
99139

100-
format: boolean (any value means `true`)
101-
102-
description: toggle the "Skype meeting" button.
140+
format: boolean (any truthy value, `1` and `true` both work)
103141

104142
example: `online=1`
105143

144+
confidence: verified
145+
146+
description: turns the online meeting toggle on. The toggle is labelled "Teams meeting" now, not "Skype meeting". Without this parameter the toggle stays off until an attendee is added.
147+
106148
### to
107149
required: no
108150

109151
format: string
110152

111-
description: A comma-separated list of emails of required attendees.
112-
113153
example: `to=santa@example.com,easter.bunny@example.com`
114154

155+
confidence: verified
156+
157+
description: a comma-separated list of emails of required attendees.
158+
115159
### cc
116-
format: string
160+
required: no
117161

118-
description: A comma-separated list of emails of optional attendees.
162+
format: string
119163

120164
example: `cc=santa@example.com,easter.bunny@example.com`
121165

166+
confidence: verified
167+
168+
description: a comma-separated list of emails of optional attendees.
169+
170+
### freebusy
171+
required: no
172+
173+
format: string (enum)
174+
175+
example: `freebusy=oof`
176+
177+
confidence: verified
178+
179+
options:
180+
- `free`
181+
- `tentative`
182+
- `busy`
183+
- `oof`
184+
- `workingelsewhere`
185+
- `nodata`
186+
187+
description: availability shown for the event. `oof` renders as "Out of office".
122188

123189
### reqresponse
124-
format: string
190+
required: no
191+
192+
format: boolean (`true`/`false`)
125193

126194
example: `reqresponse=true`
127195

196+
confidence: not observable
197+
198+
description: request responses from attendees. The compose form hides this behind a "Response options" menu, so the parameter could not be confirmed.
199+
128200
### allowfw
129-
format: boolean ("true"/"false")
201+
required: no
130202

131-
description: Allow forwarding.
203+
format: boolean (`true`/`false`)
132204

133205
example: `allowfw=true`
134206

207+
confidence: not observable
208+
209+
description: allow forwarding. Same "Response options" menu as above.
210+
135211
### hideattn
136-
format: boolean ("true"/"false")
212+
required: no
137213

138-
description: Hide attendee list.
214+
format: boolean (`true`/`false`)
139215

140216
example: `hideattn=true`
141217

218+
confidence: not observable
142219

143-
### freebusy
144-
format: string (enum)
220+
description: hide the attendee list. Same "Response options" menu as above.
145221

146-
options:
147-
- `free`
148-
- `tentative`
149-
- `busy`
150-
- `oof`
151-
- `workingelsewhere`
152-
- `nodata`
222+
### folderid
223+
required: no
153224

154-
### online
155-
format: any
225+
format: string
156226

157-
Description: "Skype meeting" flag.
227+
confidence: not observable
158228

159-
### folderid
160-
description: Unknown, probably Event id.
229+
description: unknown, probably the target calendar folder.
230+
231+
## Parameters that do not work
232+
233+
These were replayed against the compose form and produced no change, so do not rely on them:
234+
235+
- `private` and `sensitivity`: the privacy control stays on "Not private".
236+
- `categories`: no category is applied.
237+
- `reminder`: the reminder control keeps its default.
238+
- `charm`: no event charm is selected.

0 commit comments

Comments
 (0)