And SharePoint makes three!


The OneNote team is happy to announce support for SharePoint site-hosted notebooks (in Preview). This means you can access all your notebooks on the Microsoft cloud! This includes:

  • OneDrive-hosted personal notebooks
  • OneDrive for Business-hosted notebooks on Office 365 (also in Preview)
  • OneDrive for Business-hosted notebooks on SharePoint

Last month, we described our support for enterprise notebooks on Office 365 (new service root URL, auth model, permissions, app registration, etc.). All that pretty much applies to SharePoint site-hosted notebooks, too. The main difference for accessing OneNote content on SharePoint is the service root URL.

Service root URL

This is the pattern you use to access OneNote content on SharePoint sites:

https://www.onenote.com/api/{version}/myorganization/siteCollections/{id}/sites/{id}/notes/

The myorganization segment in the path represents the tenant that the user is logged into. (Currently, that's the only supported tenant.) Everything that comes after /notes is basically the same across services. For example, this example request gets the 10 most recently modified pages from the notebooks on the site that you have permissions to access:

https://www.onenote.com/api/beta/myorganization/siteCollections/09d1a587-a84b-4264-3d15-669429be8cc5/sites/d9e4d5c8-683f-4364-89ae-18c4e3db91e9/notes/pages?top=10

Get the site collection and site IDs

We added the FromUrl method so you can pass in an absolute site URL and get the site collection and site IDs. You should make this call only when needed, and then store the values for future use in your requests to the OneNote API. The site URL depends on your config, for example https://domain.sharepoint.com/site-a or https://domain.com/sites/site-a.

GET https://www.onenote.com/api/beta/myorganization/siteCollections/FromUrl(url='{full-path-to-SharePoint-site}')
Authorization: Bearer {access-token}
Accept: application/json

Here's an example response:

{
    "@odata.context":"https://www.onenote.com/api/beta/$metadata#Microsoft.OneNote.Api.SiteMetadata",
    "siteCollectionId":"09d1a587-a84b-4264-3d15-669429be8cc5",
    "siteId":"d9e4d5c8-683f-4363-89ae-18c4e3da91e9"
}

Parity with consumer APIs

All currently supported HTTP operations have equivalent support for enterprise notebooks, with a few exceptions. For example:

  • POST ~/notes/pages is currently not supported. To create a page, you have to include the section ID: ~/me/notes/sections/{id}/pages. Using the ?sectionName parameter to create a page is not supported yet either.
  • The $search query option is currently not supported.

You can see our supported HTTP operations here, but note that the docs and interactive calls currently target consumer notebooks on OneDrive only.

There's a couple other things you might run into when working with notebooks on SharePoint:

  • You can only create OneNote notebooks, sections, and pages on sites that have a default document library. (Some site templates don't create a default document library.) However, GET requests return OneNote content from all document libraries on the site.
  • The OneNote service root URL is immutable, meaning you can't use a SharePoint REST API site path and then tack the /notes endpoint onto it.

And the rest...

Authentication and authorization

The auth model is the same as Office 365. Learn more about Office 365 authentication and authorization.

App registration and permission scopes

You'll specify permissions for your apps when you register an application on Azure AD. The registration process and permission scopes for enterprise notebooks are described in this post. You'll need the Notes.Read.All or Notes.ReadWrite.All scope to access SharePoint site-hosted notebooks. In the future, we'll also add support for finding notebooks that are shared with you.

Keep in touch

As always, we'd love to hear what you think about the OneNote APIs and our enterprise notebook support on UserVoice. You can also contact us on twitter @onenotedev, or ask a question tagged onenote on Stack Overflow.

 

Edit 11/10/2015: Added guidance to use the Notes.Read.All and Notes.ReadWrite.All scopes to access SharePoint site-hosted notebooks.

 

Comments (13)

  1. Amit Jain says:

    Can I share notebook{In Sharepoint} with specific people through OneNote api at the time of creating of that notebook.
    Or
    Can I get editable link of OneNote page at the time of creating onenote page.

  2. Peter C says:

    The lack of support for OnPrem SharePoint is an application killer for us.

    We've been heavily invested in OneNote. We have 3000 users in an OnPrem SharePoint environment, and the silence and seeming lack of interest from MS on this issue, is making us re-evaluate whether OneNote is a viable option for us.

  3. Roger says:

    User voice about OneNote supporting Sharpoint on Premises has been closed.

    onenote.uservoice.com/.../8744506-api-support-for-on-premises-sharepoint

  4. Vishnu, can you please post your question on StackOverflow? (stackoverflow.com/.../onenote)

  5. Vishnu I says:

    When I use the accessToken from the AzureAD registered app to access the following URL

    http://www.onenote.com/.../FromUrl(url='https://*****.sharepoint.com/sites/<site-relativeurl>&quot;

    I am always getting a 401. Any idea what is going wrong?

  6. @Henrick, The "myorganization" keyword in the URL is not meant to be replaced. It represents the current tenant (which is currently the only tenant that's supported). Does that work for you for your /pages and /notebooks requests?

    @Rick, Glad to hear you got it working. Thanks!

  7. Rick says:

    Ignore the above comment that was due to a typo.... but the real reason behind my problem was myorganization/sitecollections/FromUrl(url='" + SharePointURL + "')" I was pulling the top level site and not the subside.

    All is find now, enjoying the blogs.

  8. Rick says:

    Had no problem with the OneNote APIs so far but can't seem to get them working with SharePoint.

     "error":{

       "code":"20143","message":"The OData query is invalid. The URI segment '76608722-3270-46cd-b60c-810766b9143d' is invalid after the segment 'siteColletions'.","@api.url":"go.microsoft.com/fwlink

     }

  9. Henrik Gustafsson says:

    Hi!

    I am trying to testing this endpoint with the following url according to your sample

    http://www.onenote.com/.../pages

    I have replaced "myorganization" with my tenant name (i.e. mytenant if my tenant is mytenant.sharepoint.com). replaced the site id and web id with the correct ones.

    But I am getting an error message telling me

    "No HTTP resource was found that matches the request URI"

    The exact same code works fine when changing the URL to use "http://www.onenote.com/.../notebooks&quot;

    Any hints on what is wrong?

  10. Kyle Zimmerman says:

    Not the original person, but I too would really like support for On-Premises SharePoint. I've created a request on UserVoice (onenote.uservoice.com/.../8744506-api-support-for-on-premises-sharepoint). If anyone else is in the same boat, please vote for this request!

    Thanks again to the OneNote Team! The API looks awesome, I just wish I could use it.

  11. Gareth Jones says:

    Dan, we currently have no plans to support on-premises SharePoint servers via the OneNote API.  You can add this as a feature request on UserVoice at onenote.uservoice.com/.../245490-onenote-apis to see if there is broad demand for this.

  12. Dan says:

    When will be OneNote support SharePoint on Premises (team sites and My sites). There is no app setting to specify a server. This is a very poor implementation.

  13. SharePoint 2013 Developer Online Training says:

    Information was good, I like your post. Looking forward for more on this topic.

    <a href="staygreenacademy.com/">SharePoint 2013 Online Videos</a>

Skip to main content