Content Connectors
import { Tabs, TabItem } from ‘@astrojs/starlight/components’;
Connectors bring your existing content into Kiomon automatically — no copy-pasting. Connect a source once; Kiomon syncs it on a schedule and on demand, converting each item into a searchable document.
Available connectors
Section titled “Available connectors”| Connector | Status | Type | What syncs |
|---|---|---|---|
| Notion | Active | OAuth | Pages from your workspace(s) |
| Google Drive | Active | OAuth | Files (Google Docs, Sheets-ish, PDFs, text) from your Drive |
| Confluence Cloud | Active | OAuth | Pages from a Confluence space (offset-paginated, full space sync) |
Connecting a source
Section titled “Connecting a source”1. Dashboard → **Connectors** → *Add connection* → **Notion**.2. Authorize with your Notion account (OAuth, scoped and revocable).3. Kiomon catalogues your workspace pages and kicks off the initial sync immediately.4. The connector stays in `syncing` until the first pass completes; afterwards it re-syncs on schedule and via the **Sync now** button.
</TabItem><TabItem label="Google Drive">
1. Dashboard → **Connectors** → *Add connection* → **Google Drive**.2. Authorize with Google. Tokens are stored encrypted and **auto-refreshed** when they expire.3. Choose what to sync (a file picker lets you select files or folders).4. Syncs convert documents to clean text; subsequent syncs pick up changes.
</TabItem><TabItem label="Confluence Cloud">
1. Dashboard → **Connectors** → *Add connection* → **Confluence Cloud**.2. Authorize with Confluence.3. Pick the **spaces** you want (the dashboard lists them).4. Large spaces sync fully in one trigger thanks to offset-based **sync continuation** — Kiomon re-dispatchs itself hop-by-hop until the space is complete, instead of waiting for the next scheduled run.
</TabItem>How sync works under the hood
Section titled “How sync works under the hood”The sync pipeline is asynchronous and chunked:
Connector trigger (connect, manual "Sync now", or schedule) │ ▼Source content is fetched (paginated, rate-limit safe) │ ▼Items stream back in batches and become documents │ ▼A "synced" state once the run completes; new items areindexed, auto-tagged, and graphed like any other saveKey properties:
- Bulk-safe — a large Notion workspace or Drive folder syncs fully in one trigger (no waiting for the next scheduled run)
- Consistent state — the connector stays in
syncinguntil the run completes, then flips tosynced; a stalled sync is surfaced so you can re-trigger it - Reconciliation — content removed from the source is cleaned up during sync
- Usage is checked before each sync, so you’re never surprised by a half-sync at your plan limit
Managing connectors
Section titled “Managing connectors”| Action | Where |
|---|---|
| Connect | Dashboard → Connectors → Add connection |
| Sync now | Connector card → Sync (or via API POST /api/connectors/:id/sync) |
| Rename / toggle | Connector settings |
| Remove | Disconnect — token and synced items are cleaned up (content you already saved is kept unless you delete it) |
| Flows | Notion spaces, Google Drive picker, Confluence spaces provide purpose-built selection UIs |
Plan limits
Section titled “Plan limits”- Free: 1 connector
- Pro (incl. trial): up to 100 connectors
The API enforces the cap (402 with a clear message on exceed); the dashboard shows the upgrade dialog.
Security model
Section titled “Security model”- OAuth tokens are encrypted at rest and never returned by the API
- Credentials are scoped per user; disconnecting a connector revokes access to your provider account
- The write-back path from the sync engine is authenticated separately from your session — clients never see or touch it
API surface
Section titled “API surface”| Endpoint | Purpose |
|---|---|
GET /api/connectors |
List connectors |
POST /api/connectors |
Create a connector (OAuth stub) |
GET /api/connectors/connections |
List the user’s OAuth connections |
DELETE /api/connectors/connections/:id |
Disconnect |
PATCH /api/connectors/:id |
Update config (spaces, folders, label) |
POST /api/connectors/:id/sync |
Trigger a manual sync |
GET /api/connectors/:id/confluence/spaces |
List Confluence spaces |
POST /api/connectors/:id/google/token |
Exchange a Drive token |
The sync write-back is authenticated separately from your session and never exposed to clients.