curl --request PATCH \
--url https://app.famulor.io/api/v1/knowledge-bases/{id}/drive-sources/{sourceId} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Customer success files",
"connection_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"folder_id": "<string>",
"folder_name": "<string>",
"drive_id": "<string>",
"include_subfolders": true,
"max_files": 250,
"auto_sync": true,
"sync_interval_hours": 2
}
'import requests
url = "https://app.famulor.io/api/v1/knowledge-bases/{id}/drive-sources/{sourceId}"
payload = {
"name": "Customer success files",
"connection_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"folder_id": "<string>",
"folder_name": "<string>",
"drive_id": "<string>",
"include_subfolders": True,
"max_files": 250,
"auto_sync": True,
"sync_interval_hours": 2
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: 'Customer success files',
connection_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
folder_id: '<string>',
folder_name: '<string>',
drive_id: '<string>',
include_subfolders: true,
max_files: 250,
auto_sync: true,
sync_interval_hours: 2
})
};
fetch('https://app.famulor.io/api/v1/knowledge-bases/{id}/drive-sources/{sourceId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://app.famulor.io/api/v1/knowledge-bases/{id}/drive-sources/{sourceId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'name' => 'Customer success files',
'connection_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'folder_id' => '<string>',
'folder_name' => '<string>',
'drive_id' => '<string>',
'include_subfolders' => true,
'max_files' => 250,
'auto_sync' => true,
'sync_interval_hours' => 2
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://app.famulor.io/api/v1/knowledge-bases/{id}/drive-sources/{sourceId}"
payload := strings.NewReader("{\n \"name\": \"Customer success files\",\n \"connection_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"folder_id\": \"<string>\",\n \"folder_name\": \"<string>\",\n \"drive_id\": \"<string>\",\n \"include_subfolders\": true,\n \"max_files\": 250,\n \"auto_sync\": true,\n \"sync_interval_hours\": 2\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.patch("https://app.famulor.io/api/v1/knowledge-bases/{id}/drive-sources/{sourceId}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Customer success files\",\n \"connection_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"folder_id\": \"<string>\",\n \"folder_name\": \"<string>\",\n \"drive_id\": \"<string>\",\n \"include_subfolders\": true,\n \"max_files\": 250,\n \"auto_sync\": true,\n \"sync_interval_hours\": 2\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.famulor.io/api/v1/knowledge-bases/{id}/drive-sources/{sourceId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"Customer success files\",\n \"connection_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"folder_id\": \"<string>\",\n \"folder_name\": \"<string>\",\n \"drive_id\": \"<string>\",\n \"include_subfolders\": true,\n \"max_files\": 250,\n \"auto_sync\": true,\n \"sync_interval_hours\": 2\n}"
response = http.request(request)
puts response.read_body{
"data": {
"source": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"knowledge_base_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "Support knowledge",
"provider": "googledrive",
"connection_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"folder_id": "<string>",
"folder_name": "<string>",
"drive_id": "<string>",
"include_subfolders": true,
"max_files": 50,
"auto_sync": true,
"sync_interval_hours": 24,
"status": "idle",
"last_error": "<string>",
"last_synced_at": "2023-11-07T05:31:56Z",
"files_synced": 123,
"credits_spent": 123,
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}
}
}Update a cloud drive source
Update a cloud drive sync source (custom display name, app connection, folder, subfolder recursion, file limit, or auto-sync settings). Required scope: knowledge:write (keys without scope restrictions have full access).
curl --request PATCH \
--url https://app.famulor.io/api/v1/knowledge-bases/{id}/drive-sources/{sourceId} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Customer success files",
"connection_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"folder_id": "<string>",
"folder_name": "<string>",
"drive_id": "<string>",
"include_subfolders": true,
"max_files": 250,
"auto_sync": true,
"sync_interval_hours": 2
}
'import requests
url = "https://app.famulor.io/api/v1/knowledge-bases/{id}/drive-sources/{sourceId}"
payload = {
"name": "Customer success files",
"connection_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"folder_id": "<string>",
"folder_name": "<string>",
"drive_id": "<string>",
"include_subfolders": True,
"max_files": 250,
"auto_sync": True,
"sync_interval_hours": 2
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: 'Customer success files',
connection_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
folder_id: '<string>',
folder_name: '<string>',
drive_id: '<string>',
include_subfolders: true,
max_files: 250,
auto_sync: true,
sync_interval_hours: 2
})
};
fetch('https://app.famulor.io/api/v1/knowledge-bases/{id}/drive-sources/{sourceId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://app.famulor.io/api/v1/knowledge-bases/{id}/drive-sources/{sourceId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'name' => 'Customer success files',
'connection_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'folder_id' => '<string>',
'folder_name' => '<string>',
'drive_id' => '<string>',
'include_subfolders' => true,
'max_files' => 250,
'auto_sync' => true,
'sync_interval_hours' => 2
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://app.famulor.io/api/v1/knowledge-bases/{id}/drive-sources/{sourceId}"
payload := strings.NewReader("{\n \"name\": \"Customer success files\",\n \"connection_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"folder_id\": \"<string>\",\n \"folder_name\": \"<string>\",\n \"drive_id\": \"<string>\",\n \"include_subfolders\": true,\n \"max_files\": 250,\n \"auto_sync\": true,\n \"sync_interval_hours\": 2\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.patch("https://app.famulor.io/api/v1/knowledge-bases/{id}/drive-sources/{sourceId}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Customer success files\",\n \"connection_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"folder_id\": \"<string>\",\n \"folder_name\": \"<string>\",\n \"drive_id\": \"<string>\",\n \"include_subfolders\": true,\n \"max_files\": 250,\n \"auto_sync\": true,\n \"sync_interval_hours\": 2\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.famulor.io/api/v1/knowledge-bases/{id}/drive-sources/{sourceId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"Customer success files\",\n \"connection_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"folder_id\": \"<string>\",\n \"folder_name\": \"<string>\",\n \"drive_id\": \"<string>\",\n \"include_subfolders\": true,\n \"max_files\": 250,\n \"auto_sync\": true,\n \"sync_interval_hours\": 2\n}"
response = http.request(request)
puts response.read_body{
"data": {
"source": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"knowledge_base_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "Support knowledge",
"provider": "googledrive",
"connection_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"folder_id": "<string>",
"folder_name": "<string>",
"drive_id": "<string>",
"include_subfolders": true,
"max_files": 50,
"auto_sync": true,
"sync_interval_hours": 24,
"status": "idle",
"last_error": "<string>",
"last_synced_at": "2023-11-07T05:31:56Z",
"files_synced": 123,
"credits_spent": 123,
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}
}
}Authorizations
API key (fam_..., created under Settings → API Keys) or an OAuth 2.0 access token (fam_at_...). REST operations also require API Access for the credential's workspace. Keys can be restricted to scopes such as assistants:read, calls:write, campaigns:write, automations:read, dashboards:read, dashboards:write, leads:write, segments:write, loop:read, loop:write, phone_numbers:write, sip_trunks:write, knowledge:write, voices:read, billing:read, billing:write, settings:write, platform:read, platform:write; a *:write scope implies the matching *:read. Automation and dashboard endpoints also accept the legacy calls:* scope. Keys without scope restrictions have full access within the workspace's available capabilities.
Path Parameters
Knowledge base ID.
Drive source ID.
Body
Any subset of the create fields. Only provided fields are changed.
Custom display name shown for this source.
1 - 128"Customer success files"
googledrive, one_drive, box, dropbox, sharepoint_graph Remote folder name captured from the connected drive. This is provider metadata, not the editable source name.
1 <= x <= 500Hours between auto-sync runs. Common values: 24 = daily, 168 = weekly, 720 = monthly, 2160 = every 3 months, 4320 = every 6 months.
x >= 1Response
The updated cloud drive source.
Show child attributes
Show child attributes