--- title: "OneDrive Connector" description: "Sync Microsoft Office documents from OneDrive with scheduled synchronization and business account support" icon: "microsoft" --- Connect OneDrive to automatically sync Word documents, Excel spreadsheets, and PowerPoint presentations into your Supermemory knowledge base. Supports both personal and business accounts with scheduled synchronization. ## Quick Setup ### 1. Create OneDrive Connection ```typescript Typescript import Supermemory from 'supermemory'; const client = new Supermemory({ apiKey: process.env.SUPERMEMORY_API_KEY! }); const connection = await client.connections.create('onedrive', { redirectUrl: 'https://yourapp.com/auth/onedrive/callback', containerTags: ['user-123', 'onedrive-sync'], documentLimit: 1500, metadata: { source: 'onedrive', accountType: 'business', department: 'marketing' } }); // Redirect user to Microsoft OAuth window.location.href = connection.authLink; // Output: Redirects to OAuth provider // Output: Redirects to https://login.microsoftonline.com/oauth2/authorize?... ``` ```python Python from supermemory import Supermemory import os client = Supermemory(api_key=os.environ.get("SUPERMEMORY_API_KEY")) connection = client.connections.create( 'onedrive', redirect_url='https://yourapp.com/auth/onedrive/callback', container_tags=['user-123', 'onedrive-sync'], document_limit=1500, metadata={ 'source': 'onedrive', 'accountType': 'business', 'department': 'marketing' } ) # Redirect user to Microsoft OAuth print(f'Redirect to: {connection.auth_link}') # Output: Redirect to: https://oauth.provider.com/... # Output: Redirect to: https://login.microsoftonline.com/oauth2/authorize?... ``` ```bash cURL curl -X POST "https://api.supermemory.ai/v3/connections/onedrive" \ -H "Authorization: Bearer $SUPERMEMORY_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "redirectUrl": "https://yourapp.com/auth/onedrive/callback", "containerTags": ["user-123", "onedrive-sync"], "documentLimit": 1500, "metadata": { "source": "onedrive", "accountType": "business", "department": "marketing" } }' # Response: { # "authLink": "https://login.microsoftonline.com/oauth2/authorize?...", # "expiresIn": "1 hour", # "id": "conn_od123" # } ``` ### 2. Handle Microsoft OAuth After user grants permissions, Microsoft redirects to your callback URL. The connection is automatically established and initial sync begins. ### 3. Monitor Sync Status ```typescript Typescript // Check connection details const connection = await client.connections.getByTags('onedrive', { containerTags: ['user-123', 'onedrive-sync'] }); // List synced Office documents const documents = await client.connections.listDocuments('onedrive', { containerTags: ['user-123', 'onedrive-sync'] }); ``` ```python Python # Check connection details connection = client.connections.get_by_tags( 'onedrive', container_tags=['user-123', 'onedrive-sync'] ) # List synced Office documents documents = client.connections.list_documents( 'onedrive', container_tags=['user-123', 'onedrive-sync'] ) ``` ```bash cURL # Get connections by provider and tags curl -X POST "https://api.supermemory.ai/v3/connections/list" \ -H "Authorization: Bearer $SUPERMEMORY_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "containerTags": ["user-123", "onedrive-sync"], "provider": "onedrive" }' # List synced Office documents curl -X POST "https://api.supermemory.ai/v3/documents/list" \ -H "Authorization: Bearer $SUPERMEMORY_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "containerTags": ["user-123", "onedrive-sync"], "source": "onedrive" }' ``` ## Supported Document Types ### Microsoft Word Documents - **Rich text formatting** converted to markdown - **Headers and styles** preserved as markdown hierarchy - **Images and charts** extracted and referenced - **Tables** converted to markdown tables ### Excel Spreadsheets - **Worksheet data** converted to structured markdown - **Multiple sheets** processed separately - **Charts and graphs** extracted as images - **Formulas** converted to calculated values - **Cell formatting** simplified in markdown ### PowerPoint Presentations - **Slide content** converted to structured markdown - **Speaker notes** included when present - **Images and media** extracted and referenced - **Embedded objects** processed when possible ## Sync Mechanism Webhooks lead to real-time syncing of changes in documents. You may also manually trigger a sync. ### Manual Sync Trigger ```typescript Typescript // Trigger immediate sync for all OneDrive connections await client.connections.import('onedrive'); // Trigger sync for specific user await client.connections.import('onedrive', { containerTags: ['user-123'] }); console.log('Manual sync initiated - documents will update within 5-10 minutes'); ``` ```python Python # Trigger immediate sync for all OneDrive connections client.connections.import_('onedrive') # Trigger sync for specific user client.connections.import_( 'onedrive', container_tags=['user-123'] ) print('Manual sync initiated - documents will update within 5-10 minutes') ``` ```bash cURL # Trigger manual sync curl -X POST "https://api.supermemory.ai/v3/connections/onedrive/import" \ -H "Authorization: Bearer $SUPERMEMORY_API_KEY" \ -H "Content-Type: application/json" \ -d '{"containerTags": ["user-123"]}' ``` ## Delete Connection Remove a OneDrive connection when no longer needed: ```typescript Typescript // Delete by connection ID const result = await client.connections.delete('connection_id_123'); console.log('Deleted connection:', result.id); // Delete by provider and container tags const providerResult = await client.connections.deleteByProvider('onedrive', { containerTags: ['user-123'] }); console.log('Deleted OneDrive connection for user'); ``` ```python Python # Delete by connection ID result = client.connections.delete('connection_id_123') print(f'Deleted connection: {result.id}') # Delete by provider and container tags provider_result = client.connections.delete_by_provider( 'onedrive', container_tags=['user-123'] ) print('Deleted OneDrive connection for user') ``` ```bash cURL # Delete by connection ID curl -X DELETE "https://api.supermemory.ai/v3/connections/connection_id_123" \ -H "Authorization: Bearer $SUPERMEMORY_API_KEY" # Delete by provider and container tags curl -X DELETE "https://api.supermemory.ai/v3/connections/onedrive" \ -H "Authorization: Bearer $SUPERMEMORY_API_KEY" \ -H "Content-Type: application/json" \ -d '{"containerTags": ["user-123"]}' ``` Deleting a connection will: - Stop all future syncs from OneDrive - Remove the OAuth authorization - Keep existing synced documents in Supermemory (they won't be deleted) ## Advanced Configuration ### Custom Microsoft App For production deployments, configure your own Microsoft application: ```typescript Typescript // First, update organization settings with your Microsoft app credentials await client.settings.update({ onedriveCustomKeyEnabled: true, onedriveClientId: 'your-microsoft-app-id', onedriveClientSecret: 'your-microsoft-app-secret' }); // Then create connections using your custom app const connection = await client.connections.create('onedrive', { redirectUrl: 'https://yourapp.com/callback', containerTags: ['org-456', 'user-789'], metadata: { customApp: true } }); ``` ```python Python # First, update organization settings with your Microsoft app credentials client.settings.update( onedrive_custom_key_enabled=True, onedrive_client_id='your-microsoft-app-id', onedrive_client_secret='your-microsoft-app-secret' ) # Then create connections using your custom app connection = client.connections.create( 'onedrive', redirect_url='https://yourapp.com/callback', container_tags=['org-456', 'user-789'], metadata={'customApp': True} ) ``` ```bash cURL # Update organization settings curl -X PATCH "https://api.supermemory.ai/v3/settings" \ -H "Authorization: Bearer $SUPERMEMORY_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "onedriveCustomKeyEnabled": true, "onedriveClientId": "your-microsoft-app-id", "onedriveClientSecret": "your-microsoft-app-secret" }' ``` ### Document Filtering Control which OneDrive documents get synced: ```typescript Typescript // Configure filtering for Office documents await client.settings.update({ shouldLLMFilter: true, includeItems: { fileTypes: ['docx', 'xlsx', 'pptx'], folderNames: ['Projects', 'Documentation', 'Reports'], titlePatterns: ['*Proposal*', '*Specification*', '*Analysis*'] }, excludeItems: { folderNames: ['Archive', 'Templates', 'Personal'], titlePatterns: ['*Draft*', '*Old*', '*Backup*', '*~$*'] }, filterPrompt: "Sync professional business documents, project files, reports, and presentations. Skip personal files, drafts, temporary files, and archived content." }); ``` ```python Python # Configure filtering for Office documents client.settings.update( should_llm_filter=True, include_items={ 'fileTypes': ['docx', 'xlsx', 'pptx'], 'folderNames': ['Projects', 'Documentation', 'Reports'], 'titlePatterns': ['*Proposal*', '*Specification*', '*Analysis*'] }, exclude_items={ 'folderNames': ['Archive', 'Templates', 'Personal'], 'titlePatterns': ['*Draft*', '*Old*', '*Backup*', '*~$*'] }, filter_prompt="Sync professional business documents, project files, reports, and presentations. Skip personal files, drafts, temporary files, and archived content." ) ``` ```bash cURL # Configure filtering for Office documents curl -X PATCH "https://api.supermemory.ai/v3/settings" \ -H "Authorization: Bearer $SUPERMEMORY_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "shouldLLMFilter": true, "includeItems": { "fileTypes": ["docx", "xlsx", "pptx"], "folderNames": ["Projects", "Documentation", "Reports"], "titlePatterns": ["*Proposal*", "*Specification*", "*Analysis*"] }, "excludeItems": { "folderNames": ["Archive", "Templates", "Personal"], "titlePatterns": ["*Draft*", "*Old*", "*Backup*", "*~$*"] }, "filterPrompt": "Sync professional business documents, project files, reports, and presentations. Skip personal files, drafts, temporary files, and archived content." }' # Response: { # "shouldLLMFilter": true, # "includeItems": {...}, # "excludeItems": {...}, # "filterPrompt": "..." # } ``` ### Optimization Tips 1. **Set realistic document limits** based on storage and usage 2. **Use targeted filtering** to sync only business-critical documents 3. **Monitor sync health** regularly due to scheduled nature 4. **Trigger manual syncs** when immediate updates are needed 5. **Consider account type** when setting expectations **OneDrive-Specific Benefits:** - Supports both personal and business Microsoft accounts - Processes all major Office document formats - Preserves document structure and formatting - Handles large enterprise document collections **Important Limitations:** - Large Office documents may take significant time to process - Complex Excel formulas may not convert perfectly to markdown - Microsoft API rate limits may slow sync for large accounts