{"id":26346,"date":"2026-10-22T05:30:44","date_gmt":"2026-10-22T12:30:44","guid":{"rendered":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/?p=26346"},"modified":"2026-10-22T14:05:22","modified_gmt":"2026-10-22T21:05:22","slug":"develop-enterprise-grade-apps-with-sharepoint-embedded","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/develop-enterprise-grade-apps-with-sharepoint-embedded\/","title":{"rendered":"Develop enterprise-grade apps with SharePoint Embedded"},"content":{"rendered":"<p><span data-contrast=\"auto\">Taking an enterprise application from development to production requires confidence that it can scale, stay reliable, and be governed effectively. Recent <\/span><a href=\"https:\/\/aka.ms\/spe-adoption?WT.mc_id=MTC-blogA-202610\"><span data-contrast=\"none\">SharePoint Embedded<\/span><\/a><span data-contrast=\"auto\"> updates give developers clearer guidance for making those decisions, from understanding limits and managing throttling to choosing the right permissions.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559740&quot;:278}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">In this blog post, we highlight updates that help you:\u00a0<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<ul>\n<li aria-setsize=\"-1\" data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"7\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"none\">Plan with clearer baselines and limits\u00a0<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li aria-setsize=\"-1\" data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"7\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"2\" data-aria-level=\"1\"><span data-contrast=\"auto\">Design apps that stay reliable under load<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li aria-setsize=\"-1\" data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"7\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"3\" data-aria-level=\"1\"><span data-contrast=\"auto\">Govern with more authentication and authorization tools<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li aria-setsize=\"-1\" data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"7\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"4\" data-aria-level=\"1\"><span data-contrast=\"auto\">Add Office co-authoring to your apps<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<p><span data-contrast=\"auto\">Read on to get more details and watch the SharePoint Embedded presentation below to learn more about these updates:\u00a0<\/span><span data-ccp-props=\"{}\"> <iframe loading=\"lazy\" src=\"\/\/www.youtube.com\/embed\/U3BpSUfXT9Q?t=2468s\" width=\"560\" height=\"314\" allowfullscreen=\"allowfullscreen\"><\/iframe><\/span><\/p>\n<h2 aria-level=\"2\"><span data-contrast=\"none\">Plan for scale with clearer baselines and limits\u00a0<\/span><span data-ccp-props=\"{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335559738&quot;:160,&quot;335559739&quot;:80}\">\u00a0<\/span><\/h2>\n<p><span data-contrast=\"none\">We updated the container strategy and metadata strategy to account for a shared tenant-wide site and container ceiling. The documentation now gives architects a clearer planning baseline. Read on to learn more about the latest updates and guidance on container strategy, searchability, and reliability under load.\u00a0<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">You can learn more about the different limits and get planning guidance on Microsoft Learn: <\/span><a href=\"https:\/\/learn.microsoft.com\/sharepoint\/dev\/embedded\/plan\/limits-calling-patterns#size-limits?WT.mc_id=MTC-blogA-202610\"><span data-contrast=\"none\">Understand limits and calling patterns<\/span><\/a><span data-contrast=\"auto\">.<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<h3 aria-level=\"3\"><span data-contrast=\"none\">Build your container strategy for growth\u00a0<\/span><span data-ccp-props=\"{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335559738&quot;:160,&quot;335559739&quot;:80}\">\u00a0<\/span><\/h3>\n<p><span data-contrast=\"none\">As you\u2019re designing your architecture, it\u2019s important to develop a scalable strategy for how you create containers. For example, if you\u2019re working with clients, you can plan for scale by creating a container per client. Or if you\u2019re building a line-of-business app, you can plan for scale by creating a container per activity.<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">Containers in a tenant count towards \u201csites per organization\u201d in <\/span><a href=\"https:\/\/learn.microsoft.com\/office365\/servicedescriptions\/sharepoint-online-service-description\/sharepoint-online-limits?WT.mc_id=MTC-blogA-202610\"><span data-contrast=\"none\">SharePoint limits<\/span><\/a><span data-contrast=\"auto\">. The current limit (at the time of publication) is set to <\/span><b><span data-contrast=\"auto\">2 million sites and containers per tenant<\/span><\/b><span data-contrast=\"auto\">.<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">We recommend that you confirm current size limits before production launch. <\/span><span data-contrast=\"none\">If you\u2019re planning a SharePoint Embedded application that will exceed this limit in a specific consuming tenant, contact a Microsoft representative to discuss ways to scale your application.<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">You can learn more about how you can: <\/span><a href=\"https:\/\/learn.microsoft.com\/sharepoint\/dev\/embedded\/plan\/limits-calling-patterns#design-for-container-type-limits?WT.mc_id=MTC-blogA-202610\"><span data-contrast=\"none\">Design for container type limits and container limits<\/span><\/a><span data-contrast=\"auto\">, as well as <\/span><a href=\"https:\/\/learn.microsoft.com\/sharepoint\/dev\/embedded\/plan\/container-types-containers?WT.mc_id=MTC-blogA-202610\"><span data-contrast=\"none\">Understand container types and containers<\/span><\/a><span data-contrast=\"auto\">.<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<h3 aria-level=\"3\"><span data-contrast=\"none\">Find what you\u2019re looking for with searchable columns and metadata<\/span><span data-ccp-props=\"{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335559738&quot;:160,&quot;335559739&quot;:80}\">\u00a0<\/span><\/h3>\n<p><span data-contrast=\"none\">Want to find content in your containers by more parameters? We recently increased the limit to<\/span> <a href=\"https:\/\/learn.microsoft.com\/sharepoint\/dev\/embedded\/plan\/limits-calling-patterns#size-limits?WT.mc_id=MTC-blogA-202610\"><b><span data-contrast=\"none\">40 searchable columns per container<\/span><\/b><\/a> <span data-contrast=\"auto\">(at the time of publication).<\/span><span data-contrast=\"none\"> You can use searchable columns to search for content within the search index and with KQL.\u00a0<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">You can use Microsoft Search in Microsoft Graph when your app needs keyword search across SharePoint Embedded containers or content. Search runs in the context of the signed-in user, so the service trims results to content the user can access. Your app must also have access to the corresponding container type before it can open returned containers or files.\u00a0<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">You can also use metadata when your app needs structured fields on files in a SharePoint Embedded container. Metadata is stored as columns on a <\/span><span data-contrast=\"none\">fileStorageContainer<\/span><span data-contrast=\"none\"> and as field values on the container drive&#8217;s items. Start by creating a column on the container before writing field values on files.<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">Learn more about <\/span><a href=\"https:\/\/learn.microsoft.com\/sharepoint\/dev\/embedded\/build\/search-containers-files?WT.mc_id=MTC-blogA-202610\"><span data-contrast=\"none\">Search containers and files<\/span><\/a><span data-contrast=\"auto\"> and how to <\/span><a href=\"https:\/\/learn.microsoft.com\/sharepoint\/dev\/embedded\/build\/container-metadata?WT.mc_id=MTC-blogA-202610\"><span data-contrast=\"none\">Store and query container metadata<\/span><\/a><span data-contrast=\"auto\">.<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<h3 aria-level=\"2\"><span data-contrast=\"none\">Design for reliability under load<\/span><span data-ccp-props=\"{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335559738&quot;:160,&quot;335559739&quot;:80}\">\u00a0<\/span><\/h3>\n<p><span data-contrast=\"none\">When it comes to managing documents at scale, SharePoint Embedded is designed to meet higher throughput and volume requirements than SharePoint Online applications.\u00a0<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">SharePoint Embedded enforces an <\/span><span data-contrast=\"auto\">API limit of 12,000 resource units per minute<\/span><span data-contrast=\"none\">, per app, per tenant. This default limit is up to 9.6 times higher than the limit for a SharePoint tenant with up to 1,000 licenses (<\/span><span data-contrast=\"auto\">1,250 resource units per minute<\/span><span data-contrast=\"none\">, per app, per tenant). Learn more about <\/span><a href=\"https:\/\/learn.microsoft.com\/sharepoint\/dev\/embedded\/plan\/limits-calling-patterns#size-limits?WT.mc_id=MTC-blogA-202610\"><span data-contrast=\"none\">API rate limits for SharePoint Embedded<\/span><\/a><span data-contrast=\"auto\"> and <\/span><a href=\"https:\/\/learn.microsoft.com\/sharepoint\/dev\/general-development\/how-to-avoid-getting-throttled-or-blocked-in-sharepoint-online#application-throttling?WT.mc_id=MTC-blogA-202610\"><span data-contrast=\"none\">SharePoint Online application throttling<\/span><\/a><span data-contrast=\"auto\">. <\/span><i><span data-contrast=\"auto\">Note: l<\/span><\/i><i><span data-contrast=\"none\">imits shown are at time of publication and can change; verify before production.<\/span><\/i><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2026\/10\/TenantRU.webp\"><img decoding=\"async\" class=\"wp-image-26347 size-full aligncenter\" src=\"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2026\/10\/TenantRU.webp\" alt=\"TenantRU image\" width=\"909\" height=\"510\" srcset=\"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2026\/10\/TenantRU.webp 909w, https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2026\/10\/TenantRU-300x168.webp 300w, https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2026\/10\/TenantRU-768x431.webp 768w\" sizes=\"(max-width: 909px) 100vw, 909px\" \/><\/a><\/p>\n<p><em><span class=\"TextRun SCXW113510589 BCX8\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW113510589 BCX8\">Figure: App throughput ceiling by tenant size<\/span><span class=\"NormalTextRun SCXW113510589 BCX8\"> comparing limits for<\/span><span class=\"NormalTextRun SCXW113510589 BCX8\"> a S<\/span><span class=\"NormalTextRun SCXW113510589 BCX8\">harePoint Embedded <\/span><span class=\"NormalTextRun SCXW113510589 BCX8\">tenant<\/span><span class=\"NormalTextRun SCXW113510589 BCX8\"> with SharePoint tenants <\/span><span class=\"NormalTextRun SCXW113510589 BCX8\">(sized by license count)<\/span><span class=\"NormalTextRun SCXW113510589 BCX8\">.<\/span><span class=\"NormalTextRun SCXW113510589 BCX8\"> The requests per second (req\/s) calculations assume a planning estimate of ~2 resource units per request. The actual requests per minute <\/span><span class=\"NormalTextRun ContextualSpellingAndGrammarErrorV2Themed SCXW113510589 BCX8\">depends<\/span><span class=\"NormalTextRun SCXW113510589 BCX8\"> on the APIs you call and their resource unit cost.<\/span> <span class=\"NormalTextRun SCXW113510589 BCX8\">Limits can change; verify before production.<\/span><\/span><span class=\"EOP Selected SCXW113510589 BCX8\" data-ccp-props=\"{}\">\u00a0<\/span><\/em><\/p>\n<p><span data-contrast=\"none\">When your application nears service limits, throttling can occur. We have <\/span><b><span data-contrast=\"none\">new throttling guidance<\/span><\/b><span data-contrast=\"none\"> to help you design apps that can stay reliable under load \u2013 and to help us maintain platform scalability and stability.<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<table data-tablestyle=\"MsoTableGrid\" data-tablelook=\"1184\" aria-rowcount=\"7\" aria-colcount=\"2\">\n<tbody>\n<tr aria-rowindex=\"1\">\n<td data-celllook=\"4097\"><b><span data-contrast=\"auto\">Limits<\/span><\/b><span data-ccp-props=\"{}\">\u00a0<\/span><\/td>\n<td data-celllook=\"17\"><b><span data-contrast=\"auto\">Guidance<\/span><\/b><span data-ccp-props=\"{}\">\u00a0<\/span><\/td>\n<\/tr>\n<tr aria-rowindex=\"2\">\n<td data-celllook=\"4096\"><span data-contrast=\"auto\">Slow-down signals (429\/503)<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/td>\n<td data-celllook=\"16\"><span data-contrast=\"auto\">Treat these as temporary pressure, not failure<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/td>\n<\/tr>\n<tr aria-rowindex=\"3\">\n<td data-celllook=\"4096\"><span data-contrast=\"auto\">Wait as asked (Retry-After)<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/td>\n<td data-celllook=\"16\"><span data-contrast=\"auto\">Pause for the time the service specifies<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/td>\n<\/tr>\n<tr aria-rowindex=\"4\">\n<td data-celllook=\"4096\"><span data-contrast=\"auto\">Watch capacity (Rate Limit headers)<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/td>\n<td data-celllook=\"16\"><span data-contrast=\"auto\">Use returned headers to gauge remaining headroom<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/td>\n<\/tr>\n<tr aria-rowindex=\"5\">\n<td data-celllook=\"4096\"><span data-contrast=\"auto\">Bounded retries<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/td>\n<td data-celllook=\"16\"><span data-contrast=\"auto\">Retry a few times with backoff, then stop<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/td>\n<\/tr>\n<tr aria-rowindex=\"6\">\n<td data-celllook=\"4096\"><span data-contrast=\"auto\">Reduce concurrency<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/td>\n<td data-celllook=\"16\"><span data-contrast=\"auto\">Send fewer parallel calls instead of amplifying load<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/td>\n<\/tr>\n<tr aria-rowindex=\"7\">\n<td data-celllook=\"4352\"><span data-contrast=\"auto\">Monitor by scope<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/td>\n<td data-celllook=\"272\"><span data-contrast=\"auto\">Track usage per app, tenant, user, and container<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">To reduce the likelihood of throttling, you can design for performance by reducing permission-heavy operations and spreading load across several containers. You can also monitor request rates, response codes, and latency.\u00a0<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">We suggest you implement retry logic that:\u00a0<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<ul>\n<li aria-setsize=\"-1\" data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"2\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"auto\">Detects HTTP <\/span><span data-contrast=\"none\">429<\/span> <span data-contrast=\"auto\">and <\/span><span data-contrast=\"none\">503<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li aria-setsize=\"-1\" data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"2\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"2\" data-aria-level=\"1\"><span data-contrast=\"auto\">Reads the <\/span><span data-contrast=\"none\">Retry-After<\/span><span data-contrast=\"auto\"> header<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li aria-setsize=\"-1\" data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"2\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"3\" data-aria-level=\"1\"><span data-contrast=\"auto\">Waits for the specified duration before retrying<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li aria-setsize=\"-1\" data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"2\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"4\" data-aria-level=\"1\"><span data-contrast=\"auto\">Reduces concurrency after throttling<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li aria-setsize=\"-1\" data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"2\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"5\" data-aria-level=\"1\"><span data-contrast=\"auto\">Avoids immediate retry loops<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li aria-setsize=\"-1\" data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"2\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"6\" data-aria-level=\"1\"><span data-contrast=\"auto\">Avoids request spikes after a wait period<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<p><span data-contrast=\"none\">For more guidance, read the <\/span><a href=\"https:\/\/learn.microsoft.com\/sharepoint\/dev\/embedded\/plan\/limits-calling-patterns#throttling-management?WT.mc_id=MTC-blogA-202610\"><span data-contrast=\"none\">Throttling management<\/span><\/a><span data-contrast=\"none\"> and <\/span><a href=\"https:\/\/learn.microsoft.com\/sharepoint\/dev\/embedded\/plan\/limits-calling-patterns#performance-considerations?WT.mc_id=MTC-blogA-202610\"><span data-contrast=\"none\">Performance considerations<\/span><\/a><span data-contrast=\"none\"> articles.\u00a0<\/span><span data-contrast=\"auto\">\u00a0<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<h2 aria-level=\"2\"><span data-contrast=\"none\">Strengthen governance with authentication and authorization tools<\/span><span data-ccp-props=\"{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335559738&quot;:160,&quot;335559739&quot;:80}\">\u00a0<\/span><\/h2>\n<p><span data-contrast=\"auto\">Our guidance is to avoid unnecessary additive permissions. To help developers do that, awe&#8217;re moving toward explicit identity support and narrower Graph permissions.<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<h3 aria-level=\"3\"><span data-contrast=\"none\">Choose the authentication approach that fits your app<\/span><span data-ccp-props=\"{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335559738&quot;:160,&quot;335559739&quot;:80}\">\u00a0<\/span><\/h3>\n<p><span data-contrast=\"auto\">Service principals allow developers to configure authentication according to your application architecture. To provide you with more authentication options, SharePoint Embedded now supports <\/span><a href=\"https:\/\/learn.microsoft.com\/sharepoint\/dev\/embedded\/build\/configure-authentication-authorization#configure-the-microsoft-entra-id-app?WT.mc_id=MTC-blogA-202610\"><span data-contrast=\"none\">Microsoft Entra service principal types<\/span><\/a><span data-contrast=\"auto\">, including Entra ID and Microsoft 365 security groups.\u00a0<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">Applications start with an Entra ID app registration and use Graph to interact with containers and their content. Applications can operate on behalf of a signed-in user through delegated access or without a user through app-only access. Microsoft recommends delegated access whenever possible because actions can be associated with the individual user, improving security and accountability.<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">Learn more about service principals and how to <\/span><a href=\"https:\/\/learn.microsoft.com\/sharepoint\/dev\/embedded\/admin\/grant-admin-consent-permissions?WT.mc_id=MTC-blogA-202610\"><span data-contrast=\"none\">Grant admin consent and permissions<\/span><\/a><span data-contrast=\"auto\">.<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<h3 aria-level=\"3\"><span data-contrast=\"none\">Gain greater control over app access<\/span><span data-ccp-props=\"{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335559738&quot;:160,&quot;335559739&quot;:80}\">\u00a0<\/span><\/h3>\n<p><span data-contrast=\"auto\">SharePoint Embedded applications use Microsoft Graph to access containers and content. To help you follow least-privilege access principles, SharePoint Embedded supports more targeted Microsoft Graph permissions.\u00a0<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">For example, you can use the <\/span><span data-contrast=\"auto\">FileStorageContainer.Selected<\/span><span data-contrast=\"auto\"> permission, instead of the broader <\/span><span data-contrast=\"auto\">F<\/span><span data-contrast=\"auto\">iles.Read.All<\/span><span data-contrast=\"auto\"> permission, for operations like preview file. This gives you control over the content your application can access.\u00a0<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">Learn more about <\/span><a href=\"https:\/\/learn.microsoft.com\/en-us\/sharepoint\/dev\/embedded\/plan\/authentication-permissions#container-type-permissions-microsoft-graph?WT.mc_id=MTC-blogA-202610\"><span data-contrast=\"none\">Plan authentication and permissions<\/span><\/a><span data-contrast=\"auto\">.<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<h3 aria-level=\"2\"><span data-contrast=\"none\">Add Office co-authoring to your app\u00a0<\/span><span data-ccp-props=\"{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335559738&quot;:160,&quot;335559739&quot;:80}\">\u00a0<\/span><\/h3>\n<p><span data-contrast=\"auto\">If your app stores files and users ask to edit documents, you don&#8217;t need to build a collaboration engine. SharePoint Embedded lets your app launch Word, Excel, and PowerPoint files for real-time co-authoring, backed by the same Office service Microsoft 365 uses.\u00a0<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">Your app gets a full collaboration stack:<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<ul>\n<li aria-setsize=\"-1\" data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" data-aria-posinset=\"1\" data-aria-level=\"1\"><b><span data-contrast=\"auto\">Real-time co-authoring<\/span><\/b><span data-contrast=\"auto\"> in Office for the web and Office desktop clients.<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li aria-setsize=\"-1\" data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" data-aria-posinset=\"2\" data-aria-level=\"1\"><b><span data-contrast=\"auto\">AutoSave<\/span><\/b><span data-contrast=\"auto\"> for Word, Excel, and PowerPoint files.<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li aria-setsize=\"-1\" data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" data-aria-posinset=\"3\" data-aria-level=\"1\"><b><span data-contrast=\"auto\">Automatic version history<\/span><\/b><span data-contrast=\"auto\">, so users compare and restore earlier versions.<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li aria-setsize=\"-1\" data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" data-aria-posinset=\"4\" data-aria-level=\"1\"><b><span data-contrast=\"auto\">Sharing<\/span><\/b><span data-contrast=\"auto\"> through shareable links, plus @mentions in comments for licensed users.<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li aria-setsize=\"-1\" data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" data-aria-posinset=\"5\" data-aria-level=\"1\"><b><span data-contrast=\"auto\">Scoped access levels<\/span><\/b><span data-contrast=\"auto\"> (depending on tenant\/admin configuration):<\/span><span data-contrast=\"auto\"> Anyone, People in your organization, Specific people, and People with existing access.\u00a0<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<p><span data-contrast=\"auto\">You can give users the ability to open files in Office for the web (in a new browser tab or window) or in Office desktop clients. You can also embed a read-only <\/span><a href=\"https:\/\/learn.microsoft.com\/en-us\/sharepoint\/dev\/embedded\/build\/preview-files\"><span data-contrast=\"none\">preview<\/span><\/a><span data-contrast=\"auto\"> when you need inline, in-app viewing.<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">When your users have content that\u2019s not supported by the viewer, you can configure the <\/span><b><span data-contrast=\"none\">new container type setting: <\/span><\/b><b><span data-contrast=\"auto\">UrlTemplate<\/span><\/b><span data-contrast=\"none\">, to redirect users to a specific URL or to return users to your application. For example, you can redirect users to a download action.\u00a0<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">Learn more about how to <\/span><a href=\"https:\/\/learn.microsoft.com\/sharepoint\/dev\/embedded\/plan\/office-collaboration-instead-of-building?WT.mc_id=MTC-blogA-202610\"><span data-contrast=\"none\">Add Office co-authoring without building it<\/span><\/a><span data-contrast=\"none\"> or how to <\/span><a href=\"https:\/\/learn.microsoft.com\/sharepoint\/dev\/embedded\/build\/open-office-files?WT.mc_id=MTC-blogA-202610\"><span data-contrast=\"none\">Open Office files from your app<\/span><\/a><span data-contrast=\"auto\">. <\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<h2 aria-level=\"2\"><span data-contrast=\"none\">Start building your enterprise-grade app \u00a0<\/span><span data-ccp-props=\"{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335559738&quot;:160,&quot;335559739&quot;:80}\">\u00a0<\/span><\/h2>\n<p><span data-contrast=\"auto\">Bring your app to life in a coding agent with the <\/span><a href=\"https:\/\/learn.microsoft.com\/sharepoint\/dev\/embedded\/build\/sharepoint-embedded-mcp-server\"><b><span data-contrast=\"none\">SharePoint Embedded MCP server<\/span><\/b><\/a><span data-contrast=\"auto\"> (preview) to provision and manage resources through natural language. For example, y<\/span><span data-contrast=\"none\">ou can describe what you want, like &#8220;create a container type for my app&#8221;, and the AI client calls the server&#8217;s tools to do it. Supported clients include GitHub Copilot in Visual Studio Code or CLI, Claude Desktop, Cursor, and Azure AI Foundry.\u00a0<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">For a guided view, use the <\/span><a href=\"https:\/\/marketplace.visualstudio.com\/items?itemName=SharepointEmbedded.ms-sharepoint-embedded-vscode-extension\"><b><span data-contrast=\"none\">SharePoint Embedded Visual Studio Code extension<\/span><\/b><\/a><span data-contrast=\"auto\">. You can use it to create a container type, configure the owning app and billing, register the container type, create containers, and load a sample app from a guided view in the editor.<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">Not sure where to start? Visit our updated <\/span><a href=\"https:\/\/learn.microsoft.com\/sharepoint\/dev\/embedded\/overview?WT.mc_id=M365CC?WT.mc_id=MTC-blogA-202610\"><span data-contrast=\"none\">documentation hub<\/span><\/a><span data-contrast=\"auto\">,<\/span><span data-contrast=\"none\"> which is <\/span><span data-contrast=\"auto\">easier for both humans and AI agents to read. You can use it as a grounding source for favorite agentic tool or coding agent.<\/span><span data-contrast=\"none\"> It\u2019s built around the tasks you need to evaluate, build, operate, and govern SharePoint Embedded.<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<ul>\n<li aria-setsize=\"-1\" data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"12\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"1\" data-aria-level=\"1\"><b><span data-contrast=\"auto\">Plan: <\/span><\/b><span data-contrast=\"auto\">Architecture, billing, security, limits<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li aria-setsize=\"-1\" data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"12\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"2\" data-aria-level=\"1\"><b><span data-contrast=\"auto\">Build: <\/span><\/b><span data-contrast=\"auto\">Quickstart, Model Context Protocol (MCP), auth, containers, files<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li aria-setsize=\"-1\" data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"12\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"3\" data-aria-level=\"1\"><b><span data-contrast=\"auto\">Publish: <\/span><\/b><span data-contrast=\"auto\">Customer onboarding and billing<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li aria-setsize=\"-1\" data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"12\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"4\" data-aria-level=\"1\"><b><span data-contrast=\"auto\">Administer: <\/span><\/b><span data-contrast=\"auto\">Install and manage applications<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li aria-setsize=\"-1\" data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"12\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"5\" data-aria-level=\"1\"><b><span data-contrast=\"auto\">Govern: <\/span><\/b><span data-contrast=\"auto\">Security and compliance controls<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Taking an enterprise application from development to production requires confidence that it can scale, stay reliable, and be governed effectively. Recent SharePoint Embedded updates give developers clearer guidance for making those decisions, from understanding limits and managing throttling to choosing the right permissions.\u00a0 In this blog post, we highlight updates that help you:\u00a0\u00a0 Plan with [&hellip;]<\/p>\n","protected":false},"author":120267,"featured_media":26353,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[20,166,449],"tags":[162,450],"class_list":["post-26346","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-power-platform","category-sharepoint","category-sharepoint-embedded","tag-sharepoint","tag-sharepointembedded"],"acf":[],"blog_post_summary":"<p>Taking an enterprise application from development to production requires confidence that it can scale, stay reliable, and be governed effectively. Recent SharePoint Embedded updates give developers clearer guidance for making those decisions, from understanding limits and managing throttling to choosing the right permissions.\u00a0 In this blog post, we highlight updates that help you:\u00a0\u00a0 Plan with [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/posts\/26346","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/users\/120267"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/comments?post=26346"}],"version-history":[{"count":1,"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/posts\/26346\/revisions"}],"predecessor-version":[{"id":26355,"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/posts\/26346\/revisions\/26355"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/media\/26353"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/media?parent=26346"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/categories?post=26346"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/tags?post=26346"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}