OneDrive integration
Retrieve permitted Microsoft 365 files from the connected user’s OneDrive and accessible SharePoint libraries. Use extracted DOCX, PPTX, XLSX, and text content with stored visibility scope and per-drive incremental updates.
OneDrive and SharePoint coverage map
Supported Office and text formats
The connected user’s OneDrive and accessible SharePoint document libraries.
Text extraction from DOCX, PPTX, and XLSX files.
Supported text extraction with stored visibility scope.
Understand visibility scope
Connection readiness checklist
- A Microsoft account with access to the intended OneDrive files or SharePoint libraries.
- Permission to connect that user under your organization’s policy.
- A MemorySync project for the imported Microsoft 365 knowledge.
Check items for your own planning. Nothing here changes a live connection.
0 of 4 planning steps complete
Per-drive delta timeline
- 1Discover accessible drives
Use the connected user’s OneDrive and accessible SharePoint libraries.
- 2Extract supported content
Process DOCX, PPTX, XLSX, and supported text.
- 3Apply per-drive deltas
Track incremental changes independently for each drive.
Source deletion and derived memory purge
Verify permission-aware retrieval
Query content from a known supported Office or text file, then confirm the result belongs to the intended drive and that your application honors its stored visibility scope.
Troubleshooting and related sources
Why is a SharePoint library missing?
Confirm the connected user can access the library and the intended documents.
Why is an Office file not searchable?
Verify that it is a supported DOCX, PPTX, XLSX, or text file with extractable content.
Why did content disappear after a source deletion?
Deleting a source file purges memories derived from that file.
Operations on this page
| Operation | Method and path | Python | Node.js |
|---|---|---|---|
| Read OneDrive capabilities | GET /api/v2/integrations/providers/onedrive | providers.get | providers.get |
| Start Microsoft OAuth | POST /api/v2/integrations/oauth/initiate | connections.oauth.initiate | connections.oauth.initiate |
| Confirm the connection | GET /api/v2/integrations/connections/{connection_id} | connections.get | connections.get |
| Start synchronization | POST /api/v2/integrations/connections/{connection_id}/sync | connections.trigger_sync | connections.triggerSync |
Authentication and scope
| Requirement | Contract |
|---|---|
| Credential | An API key sent as X-API-Key. Connector operations are not end-user scoped. |
| Read scope | integrations:read for every GET. |
| Write scope | integrations:write for every POST, PUT, PATCH and DELETE. |
| Tenant | Derived from the authenticated key. There is no tenant parameter to pass or to get wrong. |
X-End-User-ID | Not used. A connection belongs to the organization, not to one end user. |
1. Check OneDrive availability
Read the provider record before setup. The provider id is onedrive, even when your product labels the consent button Microsoft 365.
import osfrom memorysync import MemorySyncClientclient = MemorySyncClient(api_key=os.environ["MEMORYSYNC_API_KEY"],base_url="https://api.memorysync.io",)provider = client.providers.get("onedrive")print(provider["is_available"], provider["capabilities"])
2. Authorize Microsoft access
Start OAuth and redirect the browser to the returned URL. The connected Microsoft account and granted scopes determine which drives and libraries can be discovered.
import osfrom memorysync import MemorySyncClientclient = MemorySyncClient(api_key=os.environ["MEMORYSYNC_API_KEY"],base_url="https://api.memorysync.io",)result = client.connections.oauth.initiate("onedrive",redirect_url="https://app.example.com/connections/callback",)print(result["authorization_url"], result["connection_id"])
3. Confirm and sync
Confirm the connection before starting an incremental sync. Use the job response to follow progress instead of waiting on this request.
import osfrom memorysync import MemorySyncClientclient = MemorySyncClient(api_key=os.environ["MEMORYSYNC_API_KEY"],base_url="https://api.memorysync.io",)connection = client.connections.get("conn_8f21a4")if connection["status"] == "connected":job = client.connections.trigger_sync("conn_8f21a4", job_type="incremental")print(job["id"], job["status"])
Errors and next action
| Status | Meaning | Next action |
|---|---|---|
401 | Missing, malformed or inactive API key. | Check server configuration without printing the key. |
403 | The key lacks integrations:read or integrations:write. | Grant the scope on the key, or use a key that has it. |
404 | The connection, object or job is not visible to this tenant. | Confirm the identifier belongs to this organization. |
409 | The connection is in a state that forbids the operation. | Read the connection status first and act on it. |
429 | Rate limited, either by MemorySync or by the upstream provider. | Back off; do not tighten a polling loop in response. |
5xx | Service failure. | Treat a write outcome as uncertain and reconcile by reading the connection back. |