sync
title: Sync description: Connect and ingest data from 41+ SaaS tools with unified connectors. category: SYNC order: 1
Sync
Sync is the data ingestion layer. Connect to 41+ SaaS tools and automatically sync documents into your federated knowledge graph.
Overview
graph LR
subgraph "Data Sources"
SLACK[Slack]
NOTION[Notion]
GITHUB[GitHub]
MORE[40+ more]
end
subgraph "Metalogue"
CONN[Connector Layer]
VDB[(Vector Store)]
end
SLACK --> CONN
NOTION --> CONN
GITHUB --> CONN
MORE --> CONN
CONN --> VDB
API Endpoints
List Connectors
GET /v1/connectors
Response:
{
"connectors": [
{
"connector_id": "slack-abc123",
"connector_type": "slack",
"display_name": "Company Slack",
"status": "idle",
"last_sync_at": "2026-01-20T01:00:00Z",
"document_count": 15420
}
]
}
Create Connector
POST /v1/connectors
Content-Type: application/json
{
"connector_type": "slack",
"display_name": "Company Slack",
"credentials": {
"token": "xoxb-your-bot-token"
},
"settings": {
"channels": ["general", "engineering"],
"sync_private": false
}
}
Response:
{
"connector_id": "slack-abc123",
"connector_type": "slack",
"display_name": "Company Slack",
"status": "connecting",
"oauth_url": null
}
Get Connector
GET /v1/connectors/{connector_id}
Trigger Sync
POST /v1/connectors/{connector_id}/sync?full=false
| Parameter | Type | Description |
|---|---|---|
full | boolean | If true, full resync; if false, incremental |
Response:
{
"status": "syncing",
"connector_id": "slack-abc123",
"sync_type": "incremental"
}
Execute Action (Agentic)
POST /v1/connectors/{connector_id}/execute
Content-Type: application/json
{
"intent": "Send message to #general about deployment complete",
"context": {
"channel": "general",
"priority": "high"
},
"dry_run": false
}
Execute actions on connected tools using natural language. The LLM routes your intent to the appropriate API calls.
Delete Connector
DELETE /v1/connectors/{connector_id}
SDK Usage
TypeScript
import { MetalogueClient } from '@metalogue/sdk';
const client = new MetalogueClient({ apiKey: API_KEY });
// List connectors
const connectors = await client.listConnectors();
// Create connector
const connector = await client.createConnector({
connector_type: 'slack',
display_name: 'Company Slack',
credentials: { token: 'xoxb-...' },
});
// Sync
await client.syncConnector(connector.connector_id, true);
// Execute agentic action
await client.executeAction(connector.connector_id, {
intent: 'Send message to #engineering about the bug fix',
context: { channel: 'engineering' },
});
Python
from metalogue import MetalogueClient
client = MetalogueClient(api_key=API_KEY)
# List connectors
connectors = await client.list_connectors()
# Create connector
connector = await client.create_connector(
connector_type="slack",
display_name="Company Slack",
credentials={"token": "xoxb-..."},
)
# Sync
await client.sync_connector(connector.connector_id, full=True)
Supported Connectors
Productivity & Collaboration
| Connector | Auth Type | Document Types |
|---|---|---|
| Slack | OAuth 2.0 | Messages, Threads, Files |
| Notion | OAuth 2.0 | Pages, Databases, Comments |
| Google Workspace | OAuth 2.0 | Drive, Docs, Calendar, Gmail |
| Microsoft 365 | OAuth 2.0 | Teams, Outlook, OneDrive |
| Discord | OAuth 2.0 | Messages, Channels, Servers |
| Confluence | OAuth 2.0 | Pages, Spaces, Comments |
DevTools
| Connector | Auth Type | Document Types |
|---|---|---|
| GitHub | OAuth 2.0 | Repos, Issues, PRs, Discussions |
| GitLab | OAuth 2.0 | Projects, MRs, Issues |
| Jira | OAuth 2.0 | Issues, Projects, Sprints |
| Linear | OAuth 2.0 | Issues, Projects, Cycles |
| Figma | OAuth 2.0 | Files, Comments, Components |
CRM & Sales
| Connector | Auth Type | Document Types |
|---|---|---|
| Salesforce | OAuth 2.0 | Contacts, Deals, Activities |
| HubSpot | OAuth 2.0 | CRM, Marketing, Tickets |
| Pipedrive | OAuth 2.0 | Leads, Deals, Activities |
| Intercom | OAuth 2.0 | Conversations, Users, Articles |
Support
| Connector | Auth Type | Document Types |
|---|---|---|
| Zendesk | OAuth 2.0 | Tickets, Users, Articles |
| Freshdesk | OAuth 2.0 | Tickets, Contacts, Agents |
LLM Providers (Shadow AI Detection)
| Connector | Auth Type | Purpose |
|---|---|---|
| Claude API | API Key | Conversation history, usage |
| OpenAI API | API Key | ChatGPT Enterprise logs |
| Gemini API | API Key | Gemini conversations |
OAuth Flow
For connectors requiring OAuth:
// 1. Get OAuth URL
const { oauth_url } = await client.getOAuthUrl('salesforce');
// 2. Redirect user to oauth_url
window.location.href = oauth_url;
// 3. Handle callback at your redirect URI
// Metalogue handles token exchange automatically
Connector States
| Status | Description |
|---|---|
disconnected | Not connected |
connecting | Initial connection in progress |
connected | Ready to sync |
syncing | Sync operation running |
idle | Connected, sync complete |
error | Connection or sync failed |
rate_limited | Temporarily rate limited |
paused | Manually paused |
Sync Modes
Incremental Sync
- Syncs only new/changed documents since last sync
- Runs automatically every 15 minutes (configurable)
- Minimal API calls and faster execution
Full Sync
- Re-syncs all documents from the source
- Use when you suspect data inconsistencies
- Runs nightly by default (configurable)
Rate Limiting
Connectors automatically handle rate limits:
- Token bucket algorithm per connector
- Exponential backoff on 429 responses
- Per-minute and per-hour limits configurable
{
"settings": {
"requests_per_minute": 60,
"requests_per_hour": 1000
}
}
