curl --request GET \
--url https://app.famulor.io/api/v1/platform/users/{user_id}/plan \
--header 'Authorization: Bearer <token>'import requests
url = "https://app.famulor.io/api/v1/platform/users/{user_id}/plan"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://app.famulor.io/api/v1/platform/users/{user_id}/plan', 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/platform/users/{user_id}/plan",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://app.famulor.io/api/v1/platform/users/{user_id}/plan"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://app.famulor.io/api/v1/platform/users/{user_id}/plan")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.famulor.io/api/v1/platform/users/{user_id}/plan")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": {
"workspace_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"workspace_name": "<string>",
"wallet_credits": 123,
"voice_credits_per_minute": 123,
"customer_plan_credits": 1,
"current": {
"plan_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"plan_name": "<string>",
"version": 2,
"billing_interval": "monthly",
"monthly_credits": 1,
"addon_credits": 1,
"retail_price_cents": 1,
"currency": "<string>",
"period_start": "2023-11-07T05:31:56Z",
"period_end": "2023-11-07T05:31:56Z",
"next_refill_at": "2023-11-07T05:31:56Z",
"reserve_credits": 1,
"refundable_credits": 1,
"shortage_policy": "wait",
"ends_at": "2023-11-07T05:31:56Z",
"last_error": "<string>",
"included_addons": [
{
"name": "<string>",
"quantity": 1
}
]
},
"plans": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"is_active": true,
"currency": "<string>",
"price_monthly_cents": 1,
"price_yearly_cents": 1,
"monthly_credits": 1,
"included_minutes": 1,
"extra_minute_cost_cents": 1,
"monthly_addon_credits": 1,
"yearly_addon_credits": 1,
"included_addons": [
{
"name": "<string>",
"quantity": 1
}
],
"limits": {},
"unavailable_reason": "<string>",
"monthly_quote_token": "<string>",
"yearly_quote_token": "<string>"
}
],
"blocked_reason": "<string>",
"auto_topup": {
"enabled": true,
"has_saved_card": true,
"amount_cents": 1,
"currency": "<string>",
"decimal_digits": 2,
"consent_token": "<string>"
}
}
}{
"error": {
"code": "unauthorized",
"message": "<string>"
}
}{
"error": {
"code": "unauthorized",
"message": "Invalid API key."
}
}{
"error": {
"code": "unauthorized",
"message": "<string>"
}
}{
"error": {
"code": "unauthorized",
"message": "<string>"
}
}{
"error": {
"code": "unauthorized",
"message": "<string>"
}
}{
"error": {
"code": "rate_limited",
"message": "Too many requests. Retry after the indicated delay."
}
}{
"error": {
"code": "unauthorized",
"message": "<string>"
}
}Review a customer managed plan
Requires live owner/admin membership in the calling credential’s reseller workspace. Existing managed agreements can still be reviewed and ended after Whitelabel entitlement ends; assigning or replacing a plan requires the entitlement. Operates only on that reseller’s customer workspaces, including when the acting user is a platform administrator. Returns the current assignment, available plans, included services, and credit funding requirements. Required scope: platform:read.
curl --request GET \
--url https://app.famulor.io/api/v1/platform/users/{user_id}/plan \
--header 'Authorization: Bearer <token>'import requests
url = "https://app.famulor.io/api/v1/platform/users/{user_id}/plan"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://app.famulor.io/api/v1/platform/users/{user_id}/plan', 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/platform/users/{user_id}/plan",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://app.famulor.io/api/v1/platform/users/{user_id}/plan"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://app.famulor.io/api/v1/platform/users/{user_id}/plan")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.famulor.io/api/v1/platform/users/{user_id}/plan")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": {
"workspace_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"workspace_name": "<string>",
"wallet_credits": 123,
"voice_credits_per_minute": 123,
"customer_plan_credits": 1,
"current": {
"plan_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"plan_name": "<string>",
"version": 2,
"billing_interval": "monthly",
"monthly_credits": 1,
"addon_credits": 1,
"retail_price_cents": 1,
"currency": "<string>",
"period_start": "2023-11-07T05:31:56Z",
"period_end": "2023-11-07T05:31:56Z",
"next_refill_at": "2023-11-07T05:31:56Z",
"reserve_credits": 1,
"refundable_credits": 1,
"shortage_policy": "wait",
"ends_at": "2023-11-07T05:31:56Z",
"last_error": "<string>",
"included_addons": [
{
"name": "<string>",
"quantity": 1
}
]
},
"plans": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"is_active": true,
"currency": "<string>",
"price_monthly_cents": 1,
"price_yearly_cents": 1,
"monthly_credits": 1,
"included_minutes": 1,
"extra_minute_cost_cents": 1,
"monthly_addon_credits": 1,
"yearly_addon_credits": 1,
"included_addons": [
{
"name": "<string>",
"quantity": 1
}
],
"limits": {},
"unavailable_reason": "<string>",
"monthly_quote_token": "<string>",
"yearly_quote_token": "<string>"
}
],
"blocked_reason": "<string>",
"auto_topup": {
"enabled": true,
"has_saved_card": true,
"amount_cents": 1,
"currency": "<string>",
"decimal_digits": 2,
"consent_token": "<string>"
}
}
}{
"error": {
"code": "unauthorized",
"message": "<string>"
}
}{
"error": {
"code": "unauthorized",
"message": "Invalid API key."
}
}{
"error": {
"code": "unauthorized",
"message": "<string>"
}
}{
"error": {
"code": "unauthorized",
"message": "<string>"
}
}{
"error": {
"code": "unauthorized",
"message": "<string>"
}
}{
"error": {
"code": "rate_limited",
"message": "Too many requests. Retry after the indicated delay."
}
}{
"error": {
"code": "unauthorized",
"message": "<string>"
}
}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
Customer user UUID.
Query Parameters
Customer workspace UUID.
Response
Managed plan overview.
Show child attributes
Show child attributes