Copy notebooks, sections, and pages
Applies to: Enterprise notebooks on Office 365 only
To copy a OneNote notebook, section, or page, you send a POST request to the respective copy action endpoint. For example:
POST ../notes/sections/{id}/copyToNotebook
Send a JSON copy object in the message body. If the request is successful, the OneNote API returns a 202 HTTP status code and an Operation-Location header. Then, you can poll the operation endpoint for the result.
Note
Copy functionality is currently supported for Office 365 personal, site, and unified group notebooks, but not for consumer notebooks on OneDrive.
Construct the request URI
To construct the request URI, start with the service root URL for your platform:
Notebooks on OneDrive for Business
https://www.onenote.com/api/v1.0/me/notes/
https://www.onenote.com/api/v1.0/users/{id}/notes/
SharePoint site notebooks
https://www.onenote.com/api/v1.0/myOrganization/siteCollections/{id}/sites/{id}/notes/
Unified group notebooks
https://www.onenote.com/api/v1.0/myOrganization/groups/{id}/notes/
Append the respective copy action endpoint:
Copy a page to a section
../pages/{id}/copyToSection
Copy a section to a notebook
../sections/{id}/copyToNotebook
Copy a section to a section group
../sections/{id}/copyToSectionGroup
Copy a notebook
../notebooks/{id}/copyNotebook
The notebook is copied to the Notebooks folder in the destination Documents library. The Notebooks folder is created if it doesn't exist.
Your full request URI will look like one of these examples:
https://www.onenote.com/api/v1.0/me/notes/sections/{id}/copyToNotebook
https://www.onenote.com/api/v1.0/users/{id}/notes/sections/{id}/copytosectiongroup
https://www.onenote.com/api/v1.0/myOrganization/siteCollections/{id}/sites/{id}/notes/pages/{id}/copyToSection
https://www.onenote.com/api/v1.0/groups/{id}/notes/notebooks/{id}/copyNotebook
Note
Learn more about the service root URL.
Construct the message body
In the message body, send a JSON object that contains the parameters that your operation needs. It's okay to send an empty body if no parameters are needed.
Parameter | Description |
---|---|
id | The ID of the destination notebook or section group (for sections); or the ID of the destination section (for pages). Used with copyToNotebook, copyToSectionGroup, and copyToSection only. |
siteCollectionId | The ID of the SharePoint site collection that contains the site to copy the item to. Used with siteId, and used only when copying to a SharePoint site. |
siteId | The ID of the SharePoint site to copy the item to. Used with siteCollectionId, and used only when copying to a SharePoint site. |
groupId | The ID of the group to copy the item to. Used only when copying to a unified group. |
renameAs | The name of the copy. Used with copyNotebook, copyToNotebook, and copyToSectionGroup only. Defaults to the name of the existing item. |
Learn how to get notebook, section group, and section IDs and get site collection and site IDs. For information about getting group IDs, see the Azure AD Graph API documentation.
Example flow for a copy operation
First you send a POST request to the copy action on the item you want to copy. You can copy from notebooks that the user has access to (owned or shared) as long as the source and destination are in the same tenant.
The following example copies a personal notebook to a SharePoint team site. The request doesn't include the renameAs parameter, so the new notebook uses the existing name.
POST https://www.onenote.com/api/v1.0/me/notes/notebooks/1-db247796-f4d1-4972-a869-942919bf9923/copyNotebook
Authorization: Bearer {token}
Content-Type: application/json
{
"siteCollectionId":"0f6dbd5d-d179-49c6-aabd-15830ea90ca8",
"siteId":"3ba679cf-4470-466e-bc20-053bdfec75bf"
}
Note
Copy operations honor the source notebook's permissions, so the authenticated user must be able to access the source notebook in order to copy it. However, copies don't retain the permissions of the source. The copy has permissions as though the user just created it.
If the call is successful, the OneNote API returns a 202 status code and an Operation-Location header. Here's an excerpt of the response:
HTTP/1.1 202 Accepted
Location: https://www.onenote.com/api/v1.0/me/notes/notebooks/1-db247796-f4d1-4972-a869-942919bf9923
X-CorrelationId: 8a211d7c-220b-413d-8022-9a946499fcfb
Operation-Location: https://www.onenote.com/api/beta/myOrganization/siteCollections/0f6dbd5d-d179-49c6-aabd-15830ea90ca8/sites/0f6dbd5d-d179-49c6-aabd-15830ea90ca8/notes/operations/copy-8a211d7c-220b-413d-8022-9a946499fcfb
...
Then you poll the Operation-Location endpoint to get the status of the copy operation:
GET https://www.onenote.com/api/beta/myOrganization/siteCollections/0f6dbd5d-d179-49c6-aabd-15830ea90ca8/sites/0f6dbd5d-d179-49c6-aabd-15830ea90ca8/notes/operations/copy-8a211d7c-220b-413d-8022-9a946499fcfb
Authorization: Bearer {token}
Accept: application/json
The OneNote API returns an OperationModel object that shows the current status. The following example response is returned when the status is completed.
{
"@odata.context":"https://www.onenote.com/api/beta/$metadata#myOrganization/siteCollections('0f6dbd5d-d179-49c6-aabd-15830ea90ca8')/sites('0f6dbd5d-d179-49c6-aabd-15830ea90ca8')/notes/operations/$entity",
"id":"copy-1c5be75c-e7db-4219-8145-a2d6c3f171a33ec9f3da-2b24-4fb1-a776-fe8c8cd1410f",
"status":"completed",
"createdDateTime":"2015-09-16T17:32:07.048Z",
"lastActionDateTime":"2015-09-16T17:32:17.7777639Z",
"resourceLocation":"https://www.onenote.com/api/v1.0/myOrganization/siteCollections/0f6dbd5d-d179-49c6-aabd-15830ea90ca8/sites/3ba679cf-4470-466e-bc20-053bdfec75bf/notes/notebooks/1-bde29eeb-66e2-4fed-8d48-51cd1bf32511",
"resourceId":null,"
"error":null
}
The status can be completed, running, or failed.
- If completed, the resourceLocation property contains the resource endpoint for the new copy.
- If running, the percentComplete property shows the approximate percentage completed.
- If failed, the error and @api.diagnostics properties provide error information.
You can poll the operation endpoint until the operation has completed or failed.
Request and response information
Request data | Description |
---|---|
Protocol | All requests use the SSL/TLS HTTPS protocol. |
Authorization header | Bearer {token} , where {token} is a valid OAuth 2.0 access token for your registered app.If missing or invalid, the request fails with a 401 status code. See Authentication and permissions. |
Content-Type header | application/json |
Accept header | application/json |
Response data | Description |
---|---|
Success code | A 202 status HTTP status code. |
Operation-Location header | The URL to poll for the status of the operation. Polling the operation endpoint returns an OperationModel object that contains the status of the operation and other information. |
X-CorrelationId header | A GUID that uniquely identifies the request. You can use this value along with the value of the Date header when working with Microsoft support to troubleshoot issues. |
Construct the OneNote service root URL
The OneNote service root URL uses the following format for all calls to the OneNote API.
https://www.onenote.com/api/{version}/{location}/notes/
The version
segment in the URL represents the version of the OneNote API that you want to use.
Use
v1.0
for stable production code.Use
beta
to try out a feature that's in development. Features and functionality in beta may change, so you shouldn't use it in your production code.
The location
segment in the URL represents the location of the notebooks that you want to access:
Notebooks on OneDrive for Business
Use
me
for OneNote content that’s owned by the current user.Use
users/{id}
for OneNote content that the specified user (in the URL) has shared with the current user. Use the Azure AD Graph API to get user IDs.
SharePoint site notebooks
Team sites and other SharePoint sites can contain OneNote notebooks in their document libraries.
Use
myOrganization/siteCollections/{id}/sites/{id}
for OneNote content in a site in the tenant that the current user is logged into. Only the current tenant is supported, accessed using themyOrganization
keyword. Learn how to get site IDs.
Unified group notebooks
Unified groups (also called Office 365 groups) are part of the Office 365 connected experience. Group members can share notebooks, files, and email.
Use
myOrganization/groups/{id}
for OneNote content in the specified group that the current user is a member of. Unified groups are the only supported group type. Use the Azure AD Graph API to get group IDs.
Use the FromUrl method to get the site collection and site IDs
You can use the FromUrl method to get the site collection and site IDs for a specified absolute site URL. You should make this call only when needed, and then store the values for future use.
The format of the site URL depends on your configuration, for example https://domain.sharepoint.com/site-a
or https://domain.com/sites/site-a
.
Example request
GET https://www.onenote.com/api/v1.0/myOrganization/siteCollections/FromUrl(url='{full-path-to-SharePoint-site}')
Authorization: Bearer {token}
Accept: application/json
Example response
{"@odata.context":"https://www.onenote.com/api/v1.0/$metadata#Microsoft.OneNote.Api.SiteMetadata", "siteCollectionId":"09d1a587-a84b-4264-3d15-669429be8cc5", "siteId":"d9e4d5c8-683f-4363-89ae-18c4e3da91e9"}
Requirements for using FromUrl and working with SharePoint site notebooks:
You can only create OneNote notebooks, section groups, 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.The user on whose behalf you're calling must be a member of the site.
FromUrl works only with sites that have been indexed. It may take several hours to index a new site.
Permissions
To copy OneNote notebooks, sections, and pages, you'll need to request appropriate permissions. Choose the lowest level of permissions that your app needs to do its work.
Platform | Permission scope |
---|---|
Consumer | office.onenote_create, office.onenote_update_by_app, office.onenote_update |
Enterprise | Notes.Create, Notes.ReadWrite.CreatedByApp, Notes.ReadWrite, Notes.ReadWrite.All |
For more information about permission scopes and how they work, see OneNote permission scopes.