Searching SharePoint
Use the SharePoint search REST API to find sites, documents, people, and list items
across the tenant. Queries use Keyword Query Language (KQL) with property
filters, refiners, sort orders, suggestions, and pagination.
Prerequisites
| Requirement |
Description |
Reference |
| Read access to the content being searched |
Search results respect item-level permissions. Users only see what they can access. |
SharePoint admin roles |
| Sites.ReadWrite.All |
Required for the admin examples |
SharePoint admin roles |
How search works
flowchart LR
Query["KQL Query\n(report.docx ContentType:document)"]
SearchAPI["SharePoint Search\nREST API"]
Results["Results\n(filtered by permissions)"]
Refinement["Refiners /\nPagination"]
Query --> SearchAPI
SearchAPI --> Results
SearchAPI --> Refinement
Refinement --> Query
Search queries are sent to the /_api/search/query endpoint as KQL text.
Results respect the requesting user's permissions.
Common KQL filters
| Filter |
Example |
Description |
IsDocument:1 |
project report IsDocument:1 |
Files only |
contentclass:STS_Site |
contentclass:STS_Site |
Sites only |
contentclass:SP.People |
contentclass:SP.People Smith |
People only |
Path: |
Path:https://... |
Restrict scope |
ContentType: |
ContentType:invoice |
Filter by content type |
Author: |
Author:"Vadim G" |
Filter by author |
LastModifiedTime: |
LastModifiedTime>2026-01-01 |
Date range |
Examples
Query
Administration
Quick start
from office365.sharepoint.client_context import ClientContext
ctx = ClientContext("https://contoso.sharepoint.com/sites/team").with_client_certificate(
"contoso.onmicrosoft.com", client_id="client_id", thumbprint="thumbprint", cert_path="./cert.pem"
)
# Search for documents
result = ctx.search.post_query("IsDocument:1", row_limit=10).execute_query()
rows = result.value.PrimaryQueryResult.RelevantResults.Table.Rows
for row in rows:
print(f" {row.Cells['Path']}")
API reference