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"
}
}
}{
"error": {
"code": "invalid_request",
"message": "\"to_number\" is required (E.164 format, e.g. +4930123456)."
}
}{
"error": {
"code": "unauthorized",
"message": "Invalid API key."
}
}{
"error": {
"code": "forbidden",
"message": "This API key is missing the required scope \"assistants:write\"."
}
}{
"error": {
"code": "not_found",
"message": "Assistant not found"
}
}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"
}
}
}{
"error": {
"code": "invalid_request",
"message": "\"to_number\" is required (E.164 format, e.g. +4930123456)."
}
}{
"error": {
"code": "unauthorized",
"message": "Invalid API key."
}
}{
"error": {
"code": "forbidden",
"message": "This API key is missing the required scope \"assistants:write\"."
}
}{
"error": {
"code": "not_found",
"message": "Assistant not found"
}
}Authorizations
API key (fam_..., created under Settings → API Keys) or an OAuth 2.0 access token (fam_at_...). 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, 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.
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 <= 500x >= 1Response
The updated cloud drive source.
Show child attributes
Show child attributes