curl --request POST \
--url https://app.famulor.io/api/v1/billing/sms-registration \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"action": "checkout",
"phone_number_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"quote_ref": "<string>",
"confirm": true
}
'import requests
url = "https://app.famulor.io/api/v1/billing/sms-registration"
payload = {
"action": "checkout",
"phone_number_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"quote_ref": "<string>",
"confirm": True
}
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({
action: 'checkout',
phone_number_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
quote_ref: '<string>',
confirm: true
})
};
fetch('https://app.famulor.io/api/v1/billing/sms-registration', 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/sms-registration",
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([
'action' => 'checkout',
'phone_number_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'quote_ref' => '<string>',
'confirm' => true
]),
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/sms-registration"
payload := strings.NewReader("{\n \"action\": \"checkout\",\n \"phone_number_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"quote_ref\": \"<string>\",\n \"confirm\": true\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/sms-registration")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"action\": \"checkout\",\n \"phone_number_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"quote_ref\": \"<string>\",\n \"confirm\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.famulor.io/api/v1/billing/sms-registration")
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 \"action\": \"checkout\",\n \"phone_number_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"quote_ref\": \"<string>\",\n \"confirm\": true\n}"
response = http.request(request)
puts response.read_body{
"data": {
"registration": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "<string>",
"review_stage": "business",
"review_notice": "<string>",
"corrections_left": 123,
"details": {
"legal_name": "<string>",
"business_type": "Co-operative",
"industry": "AGRICULTURE",
"registration_type": "EIN",
"registration_number": "<string>",
"website": "<string>",
"regions": [
"AFRICA"
],
"company_type": "private",
"stock_exchange": "",
"stock_ticker": "",
"brand_contact_email": "",
"volume": "low",
"use_case": "LOW_VOLUME",
"representative_first_name": "<string>",
"representative_last_name": "<string>",
"representative_email": "jsmith@example.com",
"representative_phone": "<string>",
"representative_title": "<string>",
"representative_position": "Director",
"street": "<string>",
"city": "<string>",
"region": "<string>",
"postal_code": "<string>",
"country": "<string>",
"campaign_description": "<string>",
"message_flow": "<string>",
"message_samples": [
"<string>"
],
"privacy_policy_url": "<string>",
"terms_url": "<string>",
"has_links": true,
"has_phone_numbers": true,
"age_gated": true,
"direct_lending": true,
"consent_confirmed": true
},
"phone_number_ids": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"submitted_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"paid_until": "2023-11-07T05:31:56Z",
"cancel_at_period_end": true,
"quote": {
"quote_ref": "<string>",
"setup_amount": 123,
"monthly_amount": 123,
"currency": "<string>",
"expires_at": "2023-11-07T05:31:56Z"
}
},
"checkout_url": "<string>"
}
}Pay for or cancel SMS registration
Requires billing:write and a user-owned credential of a workspace owner, admin or billing manager; service-account credentials are rejected because a paying user must approve the charge. Checkout returns the secure payment URL for the explicitly approved quote. Cancellation stops renewal at the end of the paid period; it affects every associated number in this workspace.
curl --request POST \
--url https://app.famulor.io/api/v1/billing/sms-registration \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"action": "checkout",
"phone_number_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"quote_ref": "<string>",
"confirm": true
}
'import requests
url = "https://app.famulor.io/api/v1/billing/sms-registration"
payload = {
"action": "checkout",
"phone_number_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"quote_ref": "<string>",
"confirm": True
}
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({
action: 'checkout',
phone_number_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
quote_ref: '<string>',
confirm: true
})
};
fetch('https://app.famulor.io/api/v1/billing/sms-registration', 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/sms-registration",
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([
'action' => 'checkout',
'phone_number_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'quote_ref' => '<string>',
'confirm' => true
]),
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/sms-registration"
payload := strings.NewReader("{\n \"action\": \"checkout\",\n \"phone_number_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"quote_ref\": \"<string>\",\n \"confirm\": true\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/sms-registration")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"action\": \"checkout\",\n \"phone_number_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"quote_ref\": \"<string>\",\n \"confirm\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.famulor.io/api/v1/billing/sms-registration")
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 \"action\": \"checkout\",\n \"phone_number_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"quote_ref\": \"<string>\",\n \"confirm\": true\n}"
response = http.request(request)
puts response.read_body{
"data": {
"registration": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "<string>",
"review_stage": "business",
"review_notice": "<string>",
"corrections_left": 123,
"details": {
"legal_name": "<string>",
"business_type": "Co-operative",
"industry": "AGRICULTURE",
"registration_type": "EIN",
"registration_number": "<string>",
"website": "<string>",
"regions": [
"AFRICA"
],
"company_type": "private",
"stock_exchange": "",
"stock_ticker": "",
"brand_contact_email": "",
"volume": "low",
"use_case": "LOW_VOLUME",
"representative_first_name": "<string>",
"representative_last_name": "<string>",
"representative_email": "jsmith@example.com",
"representative_phone": "<string>",
"representative_title": "<string>",
"representative_position": "Director",
"street": "<string>",
"city": "<string>",
"region": "<string>",
"postal_code": "<string>",
"country": "<string>",
"campaign_description": "<string>",
"message_flow": "<string>",
"message_samples": [
"<string>"
],
"privacy_policy_url": "<string>",
"terms_url": "<string>",
"has_links": true,
"has_phone_numbers": true,
"age_gated": true,
"direct_lending": true,
"consent_confirmed": true
},
"phone_number_ids": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"submitted_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"paid_until": "2023-11-07T05:31:56Z",
"cancel_at_period_end": true,
"quote": {
"quote_ref": "<string>",
"setup_amount": 123,
"monthly_amount": 123,
"currency": "<string>",
"expires_at": "2023-11-07T05:31:56Z"
}
},
"checkout_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
Response
Workspace registration, reviewed quote and status. Provider identifiers and internal billing details are omitted.
checkout returns checkout_url; cancel returns registration.
Show child attributes
Show child attributes