Ask Learn
Preview
Ask Learn is an AI assistant that can answer questions, clarify concepts, and define terms using trusted Microsoft documentation.
Please sign in to use Ask Learn.
Sign inThis browser is no longer supported.
Upgrade to Microsoft Edge to take advantage of the latest features, security updates, and technical support.
Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
Update: $expand is now available in PROD. We’ve also updated our Android and iOS pickers to use this feature.
------------------------------------
Hi everyone! Jorge here. I'm excited to announce that we are shipping a new beta feature: $expand. $expand is part of the OData v4 standard and is a way of requesting related entities to be loaded inline in the response payload (e.g. sections inside notebooks). $expand lets you get more data in your API calls so you can avoid extra roundtrips.
Imagine you are displaying the user's notebooks and sections in a UI. To get those entities using the OneNote API without expand, you would need to:
1. Call GET https://www.onenote.com/api/v1.0/Notebooks
2. For each notebook returned, call https://www.onenote.com/api/v1.0/Notebooks/{NotebookId}/sections
With expand, you can simplify that logic into a single call! Notice how every notebook entity contains a section array with all the sections inside the notebook. Less API calls = Easier coding + Better performance.
// Get the user's Notebooks and all sections inside of them
GET www.onenote.com/api/beta/Notebooks?$expand=sections
1: {
2: "@odata.context":"https://www.onenote.com/api/beta/$metadata#notebooks",
3: "value":[
4: {
5: "isDefault":true,
6: "userRole":"Owner",
7: "isShared":false,
8: "sectionsUrl":"https://www.onenote.com/api/beta/notebooks/0-2C1D0B837C428511!172/sections",
9: "sectionGroupsUrl":"https://www.onenote.com/api/beta/notebooks/0-2C1D0B837C428511!172/sectionGroups",
10: "links":{
11: "oneNoteClientUrl":{
12: "href":"onenote:https://d.docs.live.net/2c1d0b837c428511/Documents/My%20Notebook"
13: },
14: "oneNoteWebUrl":{
15: "href":"https://onedrive.live.com/redir.aspx?cid=2c1d0b837c428511&page=edit&resid=2C1D0B837C428511!172&parId=2C1D0B837C428511!135"
16: }
17: },
18: "name":"My Notebook",
19: "createdBy":"Someone",
20: "lastModifiedBy":"Someone",
21: "lastModifiedTime":"2014-02-13T22:04:40.44Z",
22: "id":"0-2C1D0B837C428511!172",
23: "self":"https://www.onenote.com/api/beta/notebooks/0-2C1D0B837C428511!172",
24: "createdTime":"2013-12-12T04:19:57.247Z",
25: "sections":[
26: {
27: "isDefault":false,
28: "pagesUrl":"https://www.onenote.com/api/beta/sections/0-2C1D0B837C428511!178/pages",
29: "name":"Quick Notes",
30: "createdBy":"Someone",
31: "lastModifiedBy":"Someone",
32: "lastModifiedTime":"2014-02-13T22:04:40.44Z",
33: "id":"0-2C1D0B837C428511!178",
34: "self":"https://www.onenote.com/api/beta/sections/0-2C1D0B837C428511!178",
35: "createdTime":"2013-12-17T02:47:49.603Z"
36: }
37: ]
38: },
39: {
40: "isDefault":false,
41: "userRole":"Owner",
42: "isShared":false,
43: "sectionsUrl":"https://www.onenote.com/api/beta/notebooks/0-2C1D0B837C428511!180/sections",
44: "sectionGroupsUrl":"https://www.onenote.com/api/beta/notebooks/0-2C1D0B837C428511!180/sectionGroups",
45: "links":{
46: "oneNoteClientUrl":{
47: "href":"onenote:https://d.docs.live.net/2c1d0b837c428511/Documents/This%20is%20the%20test%20notebook"
48: },
49: "oneNoteWebUrl":{
50: "href":"https://onedrive.live.com/redir.aspx?cid=2c1d0b837c428511&page=edit&resid=2C1D0B837C428511!180&parId=2C1D0B837C428511!135"
51: }
52: },
53: "name":"This is the test notebook",
54: "createdBy":"Someone",
55: "lastModifiedBy":"Someone",
56: "lastModifiedTime":"2014-06-11T20:32:40.27Z",
57: "id":"0-2C1D0B837C428511!180",
58: "self":"https://www.onenote.com/api/beta/notebooks/0-2C1D0B837C428511!180",
59: "createdTime":"2014-06-11T20:16:11.807Z",
60: "sections":[
61: {
62: "isDefault":false,
63: "pagesUrl":"https://www.onenote.com/api/beta/sections/0-2C1D0B837C428511!183/pages",
64: "name":"Top level section",
65: "createdBy":"Someone",
66: "lastModifiedBy":"Someone",
67: "lastModifiedTime":"2014-06-11T20:16:39.553Z",
68: "id":"0-2C1D0B837C428511!183",
69: "self":"https://www.onenote.com/api/beta/sections/0-2C1D0B837C428511!183",
70: "createdTime":"2014-06-11T20:16:27.207Z"
71: }
72: ]
73: }
74: ]
75: }
But wait, there's more! You can also expand other properties on other entities:
// Get the user's notebooks with all sections and sectionGroups (with their sections too)
GET www.onenote.com/api/beta/Notebooks?$expand=sections,sectionGroups($expand=sections)
// For a known section with id 0-2C1D0B837C428511!172, get its parent Notebook.
GET www.onenote.com/api/beta/Sections/0-2C1D0B837C428511!172?$expand=parentNotebook
// For a known notebook with id 0-2C1D0B837C428511!178, expand all sections and sectionGroups
// (*magic*) Use $levels for a recursive $expand that gives you the whole OneNote hierarchy (all notebooks, sections, and section groups)
Here's a quick list showing what you can expand in all of our GET endpoints:
Entity | Can be expanded on… |
Notebook | sections, sectionGroups |
Section | parentNotebook, parentSectionGroup |
Section Group | sections, sectionGroups, parentNotebook, parentSectionGroup |
When we ship this to PROD, we'll update our iOS picker and Android picker to take advantage of this new feature. Give it a try, and feel free to ping us here or on twitter @onenotedev. Happy expanding!
Jorge
Ask Learn is an AI assistant that can answer questions, clarify concepts, and define terms using trusted Microsoft documentation.
Please sign in to use Ask Learn.
Sign in