curl --request PUT \
--url https://app.famulor.io/api/v1/reseller/plans/{id}/inclusions \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"inclusions": [
{
"code": "knowledge_bases",
"quantity": 3
},
{
"code": "fallbacks",
"quantity": 1
}
]
}
'import requests
url = "https://app.famulor.io/api/v1/reseller/plans/{id}/inclusions"
payload = { "inclusions": [
{
"code": "knowledge_bases",
"quantity": 3
},
{
"code": "fallbacks",
"quantity": 1
}
] }
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({
inclusions: [{code: 'knowledge_bases', quantity: 3}, {code: 'fallbacks', quantity: 1}]
})
};
fetch('https://app.famulor.io/api/v1/reseller/plans/{id}/inclusions', 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/reseller/plans/{id}/inclusions",
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([
'inclusions' => [
[
'code' => 'knowledge_bases',
'quantity' => 3
],
[
'code' => 'fallbacks',
'quantity' => 1
]
]
]),
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/reseller/plans/{id}/inclusions"
payload := strings.NewReader("{\n \"inclusions\": [\n {\n \"code\": \"knowledge_bases\",\n \"quantity\": 3\n },\n {\n \"code\": \"fallbacks\",\n \"quantity\": 1\n }\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/reseller/plans/{id}/inclusions")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"inclusions\": [\n {\n \"code\": \"knowledge_bases\",\n \"quantity\": 3\n },\n {\n \"code\": \"fallbacks\",\n \"quantity\": 1\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.famulor.io/api/v1/reseller/plans/{id}/inclusions")
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 \"inclusions\": [\n {\n \"code\": \"knowledge_bases\",\n \"quantity\": 3\n },\n {\n \"code\": \"fallbacks\",\n \"quantity\": 1\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"inclusions": [
{
"code": "<string>",
"quantity": 500000
}
]
}
}Update included plan services
Replace the services included in one recurring customer plan price. Requires owner or admin authority, Whitelabel access and settings:write. Only plans without retained subscriptions can change; duplicate a subscribed plan in the dashboard. This configures an offer and never charges a customer or activates a subscription. Empty inclusions remove all configured inclusions.
curl --request PUT \
--url https://app.famulor.io/api/v1/reseller/plans/{id}/inclusions \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"inclusions": [
{
"code": "knowledge_bases",
"quantity": 3
},
{
"code": "fallbacks",
"quantity": 1
}
]
}
'import requests
url = "https://app.famulor.io/api/v1/reseller/plans/{id}/inclusions"
payload = { "inclusions": [
{
"code": "knowledge_bases",
"quantity": 3
},
{
"code": "fallbacks",
"quantity": 1
}
] }
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({
inclusions: [{code: 'knowledge_bases', quantity: 3}, {code: 'fallbacks', quantity: 1}]
})
};
fetch('https://app.famulor.io/api/v1/reseller/plans/{id}/inclusions', 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/reseller/plans/{id}/inclusions",
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([
'inclusions' => [
[
'code' => 'knowledge_bases',
'quantity' => 3
],
[
'code' => 'fallbacks',
'quantity' => 1
]
]
]),
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/reseller/plans/{id}/inclusions"
payload := strings.NewReader("{\n \"inclusions\": [\n {\n \"code\": \"knowledge_bases\",\n \"quantity\": 3\n },\n {\n \"code\": \"fallbacks\",\n \"quantity\": 1\n }\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/reseller/plans/{id}/inclusions")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"inclusions\": [\n {\n \"code\": \"knowledge_bases\",\n \"quantity\": 3\n },\n {\n \"code\": \"fallbacks\",\n \"quantity\": 1\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.famulor.io/api/v1/reseller/plans/{id}/inclusions")
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 \"inclusions\": [\n {\n \"code\": \"knowledge_bases\",\n \"quantity\": 3\n },\n {\n \"code\": \"fallbacks\",\n \"quantity\": 1\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"inclusions": [
{
"code": "<string>",
"quantity": 500000
}
]
}
}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
Body
15Show child attributes
Show child attributes
Response
The saved inclusions.
Show child attributes
Show child attributes