Skip to content

Service limits

SharePoint enforces the limits below. The library declares them in office365.sharepoint.thresholds.Limits and binds the ones a call can be measured against to the model with the @limit decorator — warnings by default, never a silent truncation. The list view threshold is the one most callers meet; see Large lists and folders for the paging and indexing recipes.

The other kind of row in the same vocabulary is a throttling quota — a rate Graph allows per app, tenant, mailbox or resource. Those are reference only: the library reacts to the server signals (Retry-After, x-ms-throttle-*, RateLimit-*, X-SharePointHealthScore) rather than simulating the token bucket. They are tabulated with the signals in Throttling, and every row is answerable as data:

from office365.limits import catalog, catalog_products
from office365.sharepoint.thresholds import Limits, limit, warn_if_exceeds

warn_if_exceeds(Limits.LIST_VIEW, item_count, context="list 'Orders'")

@limit(Limits.LIST_VIEW, arg="page_size")   # declare + enforce on the model
def get_items(page_size=None): ...

catalog_products()  # ['graph', 'directory', 'outlook', 'teams', 'sharepoint', ...]
catalog("sharepoint")  # the table below, as data

Sources:

Limit Value Kind Scope Bound at Notes
list view threshold 5,000 items threshold list Folder.get_files, List.get_items page through the data or index the filtered/sorted column to exceed it
list view threshold (auditors/admins) 20,000 items threshold list List
index add/remove threshold 20,000 items threshold list List applies while adding or removing a column index
delete list/folder threshold 100,000 items threshold list List
rename folder threshold 100,000 items threshold folder Folder renaming a folder within the same library
list view lookup threshold 8 joins threshold query List queries with more joins are blocked
max items per list/library 30,000,000 items supported list List
max indexed columns 20 columns supported list List SharePoint Online allows roughly 20 indexed columns
single line of text column length 255 chars threshold column Field indexed text columns are limited to 255 characters
list row size 8,000 bytes boundary list item ListItem 300 bytes are reserved; ~7,700 are usable
file upload 250 GB boundary file FileCollection.upload_content SharePoint Server 2016/2019 caps at 10 GB (15 GB in Subscription Edition)
file attached to a list item 250 MB boundary list item Attachment
ZIP download 20 GB boundary download MoveCopyUtil the autogenerated ZIP when downloading multiple files
simple upload (Files/add) 4 MB threshold file File larger files use a resumable upload session
upload session chunk 4 MB supported file File default chunk size for resumable uploads
decoded file path length 400 chars boundary file File the folder path plus file name after decoding
long OneDrive URL 400 chars boundary url File the decoded full file URL; OneDrive/SharePoint sync fails beyond it
file name length 128 chars threshold file File the FileLeafRef name; the migration path scanner flags longer names
Excel workbook opened in the browser 10 MB threshold file File larger Excel files prompt to open in the Excel client instead of the browser
items per bulk/batch operation 100 items boundary batch ClientContext.execute_batch, ClientContext.execute_batch_async, Entity.execute_batch, Entity.execute_batch_async the OData batch size the client uses
batch request size 1 MB supported batch ClientContext.execute_batch conservative client cap for a SharePoint OData batch
managed metadata terms 1,000,000 terms supported tenant TermStore global and site-level terms combined
managed metadata term labels 2,000,000 labels supported tenant TermStore
managed metadata term properties 1,000,000 properties supported tenant TermStore
global term sets 1,000 term sets supported tenant TermStore
global term groups 1,000 term groups supported tenant TermStore
terms per managed metadata column (default) 50 terms supported column Field more than this is allowed but downstream experiences aren't guaranteed
permission inheritance break/reinherit 100,000 items threshold list List above this many items you can't break or reinherit permissions on the list/folder
unique security scopes 50,000 scopes threshold list List the recommended general limit is 5,000
recommended unique security scopes 5,000 scopes supported list List
ACL propagation child objects 500 objects threshold list List propagation fails beyond this many uniquely scoped children
SharePoint groups per site 10,000 groups supported site Site
users per SharePoint group 5,000 users supported group Group
compliance policies per tenant 10,000 policies supported tenant — eDiscovery/retention holds count toward this, shared with DLP and sensitivity labels
major versions 50,000 versions supported file File SharePoint Server 2019 allows 400,000
minor versions 511 versions boundary file File
lists and libraries per site collection 2,000 lists supported site Site
subsites per site 2,000 sites threshold site Site
max storage per site collection 25 TB boundary site Site
overall site metadata 1000 GB supported site Site metadata rarely reaches this size
move/copy total file size 100 GB threshold transfer MoveCopyUtil across sites and containers
move/copy file count 30,000 files threshold transfer MoveCopyUtil
cross-geo copy/move file size 15 GB threshold file File
OneNote file in move/copy 2 GB threshold file File
large file for migration (SMAT) 15 GB supported file File SMAT flags files over this as slow/hard to migrate; SPO upload allows 250 GB (SP2019 10-15 GB)
files in a synced library 300,000 files supported library — OneDrive sync performance limit

Migration assessment

The pre-migration assessment (MigrationAssessor / MigrationTenantAssessor) reports several of these limits as SPMT scan-assessment risk codes:

SPMT risk code Limit Scanner
LIST_VIEW_EXCEED_LIMIT list view threshold LargeListScanner
ITEM_COUNT_EXCEED_INDEX_LIMIT index add/remove threshold LargeListScanner
ITEM_COUNT_EXCEED_LIMIT max items per list/library LargeListScanner
LIST_VIEW_LOOKUP_EXCEED_LIMIT list view lookup threshold LookupColumnScanner
UNIQUE_PERMISSION_EXCEED_LIMIT unique security scopes PermissionScanner

Each AssessmentIssue carries the risk_code, and report.by_risk_code groups the issues by code. The LongOneDriveUrls detail report (LongOneDriveUrlsScanner) additionally flags files whose full URL crosses LONG_ONEDRIVE_URL; ThicketFolder (THICKET_FOLDER_UNSUPPORTED) and UnsupportedSiteTemplates cover the remaining blockers.