Appearance
Connectors Overview
Integrate Google Drive, Gmail, Notion, OneDrive, GitHub and Web Crawler to automatically sync documents into your knowledge base
Connect external platforms to automatically sync documents into supermemory. Supported connectors include Google Drive, Gmail, Notion, OneDrive, GitHub and Web Crawler with real-time synchronization and intelligent content processing.
Supported Connectors
Google Drive
**Google Docs, Slides, Sheets**
Real-time sync via webhooks. Supports shared drives, nested folders, and collaborative documents.
Gmail
**Email Threads**
Real-time sync via Pub/Sub webhooks. Syncs threads with full conversation history and metadata.
Notion
**Pages, Databases, Blocks**
Instant sync of workspace content. Handles rich formatting, embeds, and database properties.
OneDrive
**Word, Excel, PowerPoint**
Scheduled sync every 4 hours. Supports personal and business accounts with file versioning.
GitHub
**GitHub Repositories**
Real-time incremental sync via webhooks. Supports documentation files in repositories.
Web Crawler
**Web Pages, Documentation**
Crawl websites automatically with robots.txt compliance. Scheduled recrawling keeps content up to date.
Quick Start
1. Create Connection
typescript
import Supermemory from 'supermemory';
const client = new Supermemory({
apiKey: process.env.SUPERMEMORY_API_KEY!
});
const connection = await client.connections.create('notion', {
redirectUrl: '
containerTags: ['user-123', 'workspace-alpha'],
documentLimit: 5000,
metadata: { department: 'sales' }
});
// Redirect user to complete OAuth
console.log('Auth URL:', connection.authLink);
console.log('Expires in:', connection.expiresIn);
// Output: Auth URL:
// Output: Expires in: 1 hourpython
from supermemory import Supermemory
import os
client = Supermemory(api_key=os.environ.get("SUPERMEMORY_API_KEY"))
connection = client.connections.create(
'notion',
redirect_url='
container_tags=['user-123', 'workspace-alpha'],
document_limit=5000,
metadata={'department': 'sales'}
)
# Redirect user to complete OAuth
print(f'Auth URL: {connection.auth_link}')
print(f'Expires in: {connection.expires_in}')
# Output: Auth URL:
# Output: Expires in: 1 hourbash
curl -X POST " \
-H "Authorization: Bearer $SUPERMEMORY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"redirectUrl": "
"containerTags": ["user-123", "workspace-alpha"],
"documentLimit": 5000,
"metadata": {"department": "sales"}
}'
# Response: {
# "authLink": "
# "expiresIn": "1 hour",
# "id": "conn_abc123",
# "redirectsTo": "
# }2. Handle OAuth Callback
After user completes OAuth, the connection is automatically established and sync begins.
3. Monitor Sync Status
typescript
import Supermemory from 'supermemory';
const client = new Supermemory({
apiKey: process.env.SUPERMEMORY_API_KEY!
});
// List all connections using SDK
const connections = await client.connections.list({
containerTags: ['user-123', 'workspace-alpha']
});
connections.forEach(conn => {
console.log('Connection:', conn.id);
console.log('Provider:', conn.provider);
console.log('Email:', conn.email);
console.log('Created:', conn.createdAt);
});
// List synced documents (memories) using SDK
const memories = await client.documents.list({
containerTags: ['user-123', 'workspace-alpha']
});
console.log(`Synced ${memories.memories.length} documents`);
// Output: Synced 45 documentspython
from supermemory import Supermemory
import os
client = Supermemory(api_key=os.environ.get("SUPERMEMORY_API_KEY"))
# List all connections using SDK
connections = client.connections.list(
container_tags=['user-123', 'workspace-alpha']
)
for conn in connections:
print(f'Connection: {conn.id}')
print(f'Provider: {conn.provider}')
print(f'Email: {conn.email}')
print(f'Created: {conn.created_at}')
# List synced documents (memories) using SDK
memories = client.documents.list(container_tags=['user-123', 'workspace-alpha'])
print(f'Synced {len(memories.memories)} documents')
# Output: Synced 45 documentsbash
# List all connections
curl -X POST " \
-H "Authorization: Bearer $SUPERMEMORY_API_KEY" \
-H "Content-Type: application/json" \
-d '{"containerTags": ["user-123", "workspace-alpha"]}'
# Response: [{"id": "conn_abc", "provider": "notion", "email": "user@example.com", ...}]
# List synced documents
curl -X POST " \
-H "Authorization: Bearer $SUPERMEMORY_API_KEY" \
-H "Content-Type: application/json" \
-d '{"containerTags": ["user-123", "workspace-alpha"]}'
# Response: {"results": [...], "totalCount": 45}How Connectors Work
Authentication Flow
- Create Connection: Call
/v3/connections/{provider}to get OAuth URL (or direct connection for web-crawler) - User Authorization: Redirect user to complete OAuth flow (not required for web-crawler)
- Automatic Setup: Connection established, sync begins immediately
- Continuous Sync: Real-time updates via webhooks + scheduled sync every 4 hours (or scheduled recrawling for web-crawler)
Document Processing Pipeline
graph TD
A[External Document] --> B[Webhook/Schedule Trigger]
B --> C[Content Extraction]
C --> D[Chunking & Embedding]
D --> E[Index in Supermemory]
E --> F[Searchable Memory]
E --> G[Document Search]Sync Mechanisms
| Provider | Real-time Sync | Scheduled Sync | Manual Sync |
|---|---|---|---|
| Google Drive | ✅ Webhooks (7-day expiry) | ✅ Every 4 hours | ✅ On-demand |
| Gmail | ✅ Pub/Sub (7-day expiry) | ✅ Every 4 hours | ✅ On-demand |
| Notion | ✅ Webhooks | ✅ Every 4 hours | ✅ On-demand |
| OneDrive | ✅ Webhooks (30-day expiry) | ✅ Every 4 hours | ✅ On-demand |
| GitHub | ✅ Webhooks | ✅ Every 4 hours | ✅ On-demand |
| Web Crawler | ❌ Not supported | ✅ Scheduled recrawling (7+ days) | ✅ On-demand |
Connection Management
List All Connections
typescript
import Supermemory from 'supermemory';
const client = new Supermemory({
apiKey: process.env.SUPERMEMORY_API_KEY!
});
const connections = await client.connections.list({
containerTags: ['org-123']
});python
from supermemory import Supermemory
import os
client = Supermemory(api_key=os.environ.get("SUPERMEMORY_API_KEY"))
connections = client.connections.list(container_tags=['org-123'])
for conn in connections:
print(f"{conn.provider}: {conn.email} ({conn.id})")
print(f"Documents: {conn.document_limit or 'unlimited'}")
print(f"Expires: {conn.expires_at or 'never'}")
# Output: notion: user@company.com (conn_abc123)
# Output: Documents: 5000
# Output: Expires: neverbash
curl -X POST " \
-H "Authorization: Bearer $SUPERMEMORY_API_KEY" \
-H "Content-Type: application/json" \
-d '{"containerTags": ["org-123"]}'
# Response: [
# {
# "id": "conn_abc123",
# "provider": "notion",
# "email": "user@company.com",
# "documentLimit": 5000,
# "createdAt": "2024-01-15T10:30:00.000Z"
# }
# ]Delete Connections
The DELETE /v3/connections/:connectionId endpoint accepts an optional deleteDocuments query parameter:
| Parameter | Type | Default | Description |
|---|---|---|---|
deleteDocuments | boolean | true | When true, all documents imported by the connection are permanently deleted. When false, the connection is removed but documents are kept. |
INFO
Setting deleteDocuments=false is useful when you want to disconnect an integration without losing the memories that were already imported.
typescript
import Supermemory from 'supermemory';
const client = new Supermemory({
apiKey: process.env.SUPERMEMORY_API_KEY!
});
// Delete connection and all imported documents (default)
const result = await client.connections.deleteByID(connectionId);
// Delete connection but keep imported documents
const result = await client.connections.deleteByID(connectionId, {
deleteDocuments: false
});
// Or delete by provider (requires container tags)
const result = await client.connections.deleteByProvider('notion', {
containerTags: ['user-123']
});
console.log('Deleted:', result.id, result.provider);python
from supermemory import Supermemory
import os
client = Supermemory(api_key=os.environ.get("SUPERMEMORY_API_KEY"))
# Delete connection and all imported documents (default)
result = client.connections.delete_by_id(connection_id)
# Delete connection but keep imported documents
result = client.connections.delete_by_id(connection_id, delete_documents=False)
# Or delete by provider (requires container tags)
result = client.connections.delete_by_provider(
provider='notion',
container_tags=['user-123']
)
print(f"Deleted: {result.id} {result.provider}")bash
# Delete connection and all imported documents (default)
curl -X DELETE " \
-H "Authorization: Bearer $SUPERMEMORY_API_KEY"
# Delete connection but keep imported documents
curl -X DELETE " \
-H "Authorization: Bearer $SUPERMEMORY_API_KEY"
# Response: {
# "id": "conn_abc123",
# "provider": "notion"
# }