curl --request PUT \
--url https://app.famulor.io/api/v1/knowledge-bases/{id}/assistants \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"assistant_ids": [
"a1b2c3d4-0000-4000-8000-000000000001"
]
}
'import requests
url = "https://app.famulor.io/api/v1/knowledge-bases/{id}/assistants"
payload = { "assistant_ids": ["a1b2c3d4-0000-4000-8000-000000000001"] }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({assistant_ids: ['a1b2c3d4-0000-4000-8000-000000000001']})
};
fetch('https://app.famulor.io/api/v1/knowledge-bases/{id}/assistants', 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}/assistants",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'assistant_ids' => [
'a1b2c3d4-0000-4000-8000-000000000001'
]
]),
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}/assistants"
payload := strings.NewReader("{\n \"assistant_ids\": [\n \"a1b2c3d4-0000-4000-8000-000000000001\"\n ]\n}")
req, _ := http.NewRequest("PUT", 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.put("https://app.famulor.io/api/v1/knowledge-bases/{id}/assistants")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"assistant_ids\": [\n \"a1b2c3d4-0000-4000-8000-000000000001\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.famulor.io/api/v1/knowledge-bases/{id}/assistants")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"assistant_ids\": [\n \"a1b2c3d4-0000-4000-8000-000000000001\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"data": {
"knowledge_base_id": "kb1b2c3d-0000-4000-8000-000000000060",
"assistant_count": 1,
"assistants": [
{
"id": "a1b2c3d4-0000-4000-8000-000000000001",
"name": "Support Line",
"avatar_url": null,
"is_active": true,
"knowledge_gap_mode": "draft_for_review"
}
],
"attached": [
"a1b2c3d4-0000-4000-8000-000000000001"
],
"detached": [
"a1b2c3d4-0000-4000-8000-000000000002"
]
}
}Replace assistants using a knowledge base
Replaces the complete set of assistants that use this knowledge base. Listed assistants that currently use another knowledge base switch to this one; assistants left out are detached; an empty list detaches every assistant. Each change is saved as an assistant edit, including a version snapshot. Translate assistants can’t use a knowledge base. Required scope: assistants:write.
curl --request PUT \
--url https://app.famulor.io/api/v1/knowledge-bases/{id}/assistants \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"assistant_ids": [
"a1b2c3d4-0000-4000-8000-000000000001"
]
}
'import requests
url = "https://app.famulor.io/api/v1/knowledge-bases/{id}/assistants"
payload = { "assistant_ids": ["a1b2c3d4-0000-4000-8000-000000000001"] }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({assistant_ids: ['a1b2c3d4-0000-4000-8000-000000000001']})
};
fetch('https://app.famulor.io/api/v1/knowledge-bases/{id}/assistants', 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}/assistants",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'assistant_ids' => [
'a1b2c3d4-0000-4000-8000-000000000001'
]
]),
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}/assistants"
payload := strings.NewReader("{\n \"assistant_ids\": [\n \"a1b2c3d4-0000-4000-8000-000000000001\"\n ]\n}")
req, _ := http.NewRequest("PUT", 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.put("https://app.famulor.io/api/v1/knowledge-bases/{id}/assistants")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"assistant_ids\": [\n \"a1b2c3d4-0000-4000-8000-000000000001\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.famulor.io/api/v1/knowledge-bases/{id}/assistants")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"assistant_ids\": [\n \"a1b2c3d4-0000-4000-8000-000000000001\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"data": {
"knowledge_base_id": "kb1b2c3d-0000-4000-8000-000000000060",
"assistant_count": 1,
"assistants": [
{
"id": "a1b2c3d4-0000-4000-8000-000000000001",
"name": "Support Line",
"avatar_url": null,
"is_active": true,
"knowledge_gap_mode": "draft_for_review"
}
],
"attached": [
"a1b2c3d4-0000-4000-8000-000000000001"
],
"detached": [
"a1b2c3d4-0000-4000-8000-000000000002"
]
}
}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.
Body
Complete target set of assistant IDs that should use this knowledge base. Pass an empty list to detach all assistants.
500Response
The new set of assistants plus the IDs attached and detached by this request.
Show child attributes
Show child attributes