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
ParameterTypeDescription
fullbooleanIf 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

ConnectorAuth TypeDocument Types
SlackOAuth 2.0Messages, Threads, Files
NotionOAuth 2.0Pages, Databases, Comments
Google WorkspaceOAuth 2.0Drive, Docs, Calendar, Gmail
Microsoft 365OAuth 2.0Teams, Outlook, OneDrive
DiscordOAuth 2.0Messages, Channels, Servers
ConfluenceOAuth 2.0Pages, Spaces, Comments

DevTools

ConnectorAuth TypeDocument Types
GitHubOAuth 2.0Repos, Issues, PRs, Discussions
GitLabOAuth 2.0Projects, MRs, Issues
JiraOAuth 2.0Issues, Projects, Sprints
LinearOAuth 2.0Issues, Projects, Cycles
FigmaOAuth 2.0Files, Comments, Components

CRM & Sales

ConnectorAuth TypeDocument Types
SalesforceOAuth 2.0Contacts, Deals, Activities
HubSpotOAuth 2.0CRM, Marketing, Tickets
PipedriveOAuth 2.0Leads, Deals, Activities
IntercomOAuth 2.0Conversations, Users, Articles

Support

ConnectorAuth TypeDocument Types
ZendeskOAuth 2.0Tickets, Users, Articles
FreshdeskOAuth 2.0Tickets, Contacts, Agents

LLM Providers (Shadow AI Detection)

ConnectorAuth TypePurpose
Claude APIAPI KeyConversation history, usage
OpenAI APIAPI KeyChatGPT Enterprise logs
Gemini APIAPI KeyGemini 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

StatusDescription
disconnectedNot connected
connectingInitial connection in progress
connectedReady to sync
syncingSync operation running
idleConnected, sync complete
errorConnection or sync failed
rate_limitedTemporarily rate limited
pausedManually 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
  }
}

Next Steps