Needs keys Connects an external source to a knowledge base and runs the first sync before it responds. Real syncing needs an access token for Google Drive, Microsoft OneDrive or Notion, either sent here as access_token or set up through the dashboard's OAuth connect flow on the Knowledge Base page.
Without a token, the connection is mocked: each sync adds two fixed documents, FAQ and Price list, so you can test the flow keyless. The response shows mock: true.
Request#
| Path parameter | Type | Required | Description |
|---|---|---|---|
knowledge_base_id |
string | Yes | The knowledge base ID, starting with knowledge_base_. |
| Field | Type | Required | Description |
|---|---|---|---|
provider |
string | Yes | google_drive, onedrive or notion. |
config |
object | Depends | Where to read from. See the table below. |
access_token |
string | No | Provider access token. Stored encrypted. Leave it out for a mock connection. |
| Provider | config keys |
What is synced |
|---|---|---|
google_drive |
folder_id (required) |
Up to 100 files in the folder. Google Docs are exported as plain text; text/* and JSON files are downloaded. Other files are skipped. |
onedrive |
folder_id (optional, default the drive root), drive_id (optional, default your own drive) |
Up to 200 items in the folder that are text, JSON or Markdown, or end in .txt, .md, .csv or .json. |
notion |
page_id (required) |
The page and its child pages, up to two levels down, as plain text from their blocks (first 100 blocks per page). |
How syncing works#
- Each document becomes a
documentsource titled<name> (<provider>), with the provider's link as itsurl. - Synced sources do not count toward the 25 file, 500 URL and 50 text limits.
- On each sync, new documents are added, changed documents are re-ingested, and documents that disappeared are removed from the knowledge base.
- Connections sync again once a day. Call Sync knowledge base source to sync now.
Example request#
curl -X POST https://api.tried.com.au/add-knowledge-base-synced-source/knowledge_base_9f060d81a4d8df9b04ca6d12 \
-H "Authorization: Bearer $TRIED_API_KEY" \
-H "Content-Type: application/json" \
-d '{"provider": "google_drive", "config": {"folder_id": "1AbCdEfGhIjKlMnOpQrStUv"}, "access_token": "'"$GOOGLE_ACCESS_TOKEN"'"}'const res = await fetch(
"https://api.tried.com.au/add-knowledge-base-synced-source/knowledge_base_9f060d81a4d8df9b04ca6d12",
{
method: "POST",
headers: {
Authorization: `Bearer ${process.env.TRIED_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
provider: "google_drive",
config: { folder_id: "1AbCdEfGhIjKlMnOpQrStUv" },
access_token: process.env.GOOGLE_ACCESS_TOKEN,
}),
},
);
const sync = await res.json();import os, requests
res = requests.post(
"https://api.tried.com.au/add-knowledge-base-synced-source/knowledge_base_9f060d81a4d8df9b04ca6d12",
headers={"Authorization": f"Bearer {os.environ['TRIED_API_KEY']}"},
json={
"provider": "google_drive",
"config": {"folder_id": "1AbCdEfGhIjKlMnOpQrStUv"},
"access_token": os.environ["GOOGLE_ACCESS_TOKEN"],
},
)
sync = res.json()Response#
201 Created
{
"oauth": false,
"oauth_expires_timestamp": null,
"sync_id": "kbsync_47800c505ee631a117973dcf",
"knowledge_base_id": "knowledge_base_9f060d81a4d8df9b04ca6d12",
"provider": "google_drive",
"config": { "folder_id": "1AbCdEfGhIjKlMnOpQrStUv" },
"status": "synced",
"error": null,
"last_synced_timestamp": 1760832000000,
"document_count": 12,
"mock": false
}| Field | Type | Description |
|---|---|---|
sync_id |
string | Starts with kbsync_. |
status |
string | pending before the first sync, synced after a successful sync, error after a failed one. |
error |
string or null | Provider error message when status is error (up to 500 characters). |
last_synced_timestamp |
integer or null | Unix ms of the last successful sync. |
document_count |
integer | Documents currently tracked by this connection. |
mock |
boolean | true when the connection has no token and uses the mock documents. |
oauth |
boolean | true when the connection was made through the dashboard OAuth flow. |
oauth_expires_timestamp |
integer or null | Unix ms when the OAuth access token expires. Tried refreshes it before syncing. |
A failed first sync still returns 201. Check status and error.
Errors#
| Status | When |
|---|---|
400 |
provider must be one of google_drive, onedrive, notion, config.folder_id is required (Google Drive) or config.page_id is required (Notion). |
401 |
Missing or invalid API key. |
403 |
The key's IP allowlist or scopes reject the request (this route needs the kb scope), or the caller is a read-only dashboard member. |
404 |
Knowledge base <knowledge_base_id> not found. |
429 |
Rate limit exceeded. See Rate limits. |
See Errors for the body format.