curl --request POST \
--url https://app.famulor.io/api/v1/billing/subscription-change/confirm \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"review_ref": "<string>",
"confirm": true,
"payment_method_ref": "<string>"
}
'import requests
url = "https://app.famulor.io/api/v1/billing/subscription-change/confirm"
payload = {
"review_ref": "<string>",
"confirm": True,
"payment_method_ref": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({review_ref: '<string>', confirm: true, payment_method_ref: '<string>'})
};
fetch('https://app.famulor.io/api/v1/billing/subscription-change/confirm', 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/billing/subscription-change/confirm",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'review_ref' => '<string>',
'confirm' => true,
'payment_method_ref' => '<string>'
]),
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/billing/subscription-change/confirm"
payload := strings.NewReader("{\n \"review_ref\": \"<string>\",\n \"confirm\": true,\n \"payment_method_ref\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", 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.post("https://app.famulor.io/api/v1/billing/subscription-change/confirm")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"review_ref\": \"<string>\",\n \"confirm\": true,\n \"payment_method_ref\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.famulor.io/api/v1/billing/subscription-change/confirm")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"review_ref\": \"<string>\",\n \"confirm\": true,\n \"payment_method_ref\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"data": {
"updated": true,
"pending_payment": true,
"warnings": [
"<string>"
],
"billing_url": "<string>"
}
}Confirm subscription change
Applies a reviewed existing subscription change only after explicit approval. May charge the chosen saved card and select it for future renewals. References are bound to the workspace, user and exact selection. The amount is verified again; an increase, currency change, stale reference or changed subscription requires a new review. A lower refreshed amount is allowed. No card is required for a change with no payment due. Pending payments do not grant upgrades; open the returned app billing link to complete payment. Requires a user-owned credential with billing:write scope and owner, admin or billing access in the active workspace. API Access must be enabled.
curl --request POST \
--url https://app.famulor.io/api/v1/billing/subscription-change/confirm \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"review_ref": "<string>",
"confirm": true,
"payment_method_ref": "<string>"
}
'import requests
url = "https://app.famulor.io/api/v1/billing/subscription-change/confirm"
payload = {
"review_ref": "<string>",
"confirm": True,
"payment_method_ref": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({review_ref: '<string>', confirm: true, payment_method_ref: '<string>'})
};
fetch('https://app.famulor.io/api/v1/billing/subscription-change/confirm', 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/billing/subscription-change/confirm",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'review_ref' => '<string>',
'confirm' => true,
'payment_method_ref' => '<string>'
]),
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/billing/subscription-change/confirm"
payload := strings.NewReader("{\n \"review_ref\": \"<string>\",\n \"confirm\": true,\n \"payment_method_ref\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", 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.post("https://app.famulor.io/api/v1/billing/subscription-change/confirm")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"review_ref\": \"<string>\",\n \"confirm\": true,\n \"payment_method_ref\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.famulor.io/api/v1/billing/subscription-change/confirm")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"review_ref\": \"<string>\",\n \"confirm\": true,\n \"payment_method_ref\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"data": {
"updated": true,
"pending_payment": true,
"warnings": [
"<string>"
],
"billing_url": "<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.
Body
16000Explicit approval of the reviewed selection, amount, currency and selected card. The selected card also becomes the subscription renewal method.
true Reference from the same review, required when payment is due. Omit when no payment is due.
4000Response
Confirm subscription change.
Show child attributes
Show child attributes