curl --request PATCH \
--url https://app.famulor.io/api/v1/loop/routing-rules/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"active": true,
"steps": [
{
"target_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"external_number": "<string>",
"timeout_seconds": 62,
"continue_on": [],
"time_condition": "always"
}
],
"schedule_enabled": false,
"schedule_timezone": "<string>"
}
'import requests
url = "https://app.famulor.io/api/v1/loop/routing-rules/{id}"
payload = {
"name": "<string>",
"active": True,
"steps": [
{
"target_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"external_number": "<string>",
"timeout_seconds": 62,
"continue_on": [],
"time_condition": "always"
}
],
"schedule_enabled": False,
"schedule_timezone": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: '<string>',
active: true,
steps: [
{
target_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
external_number: '<string>',
timeout_seconds: 62,
continue_on: [],
time_condition: 'always'
}
],
schedule_enabled: false,
schedule_timezone: '<string>'
})
};
fetch('https://app.famulor.io/api/v1/loop/routing-rules/{id}', 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/loop/routing-rules/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'name' => '<string>',
'active' => true,
'steps' => [
[
'target_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'external_number' => '<string>',
'timeout_seconds' => 62,
'continue_on' => [
],
'time_condition' => 'always'
]
],
'schedule_enabled' => false,
'schedule_timezone' => '<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/loop/routing-rules/{id}"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"active\": true,\n \"steps\": [\n {\n \"target_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"external_number\": \"<string>\",\n \"timeout_seconds\": 62,\n \"continue_on\": [],\n \"time_condition\": \"always\"\n }\n ],\n \"schedule_enabled\": false,\n \"schedule_timezone\": \"<string>\"\n}")
req, _ := http.NewRequest("PATCH", 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.patch("https://app.famulor.io/api/v1/loop/routing-rules/{id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"active\": true,\n \"steps\": [\n {\n \"target_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"external_number\": \"<string>\",\n \"timeout_seconds\": 62,\n \"continue_on\": [],\n \"time_condition\": \"always\"\n }\n ],\n \"schedule_enabled\": false,\n \"schedule_timezone\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.famulor.io/api/v1/loop/routing-rules/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"active\": true,\n \"steps\": [\n {\n \"target_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"external_number\": \"<string>\",\n \"timeout_seconds\": 62,\n \"continue_on\": [],\n \"time_condition\": \"always\"\n }\n ],\n \"schedule_enabled\": false,\n \"schedule_timezone\": \"<string>\"\n}"
response = http.request(request)
puts response.read_bodyUpdate a Loop routing rule
Atomically replaces a routing rule, shared weekly hours, time-conditioned steps, and pre-answer continuation outcomes. Cycles are rejected and the previous rule remains unchanged on failure. Requires loop:write and a workspace owner or admin credential.
curl --request PATCH \
--url https://app.famulor.io/api/v1/loop/routing-rules/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"active": true,
"steps": [
{
"target_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"external_number": "<string>",
"timeout_seconds": 62,
"continue_on": [],
"time_condition": "always"
}
],
"schedule_enabled": false,
"schedule_timezone": "<string>"
}
'import requests
url = "https://app.famulor.io/api/v1/loop/routing-rules/{id}"
payload = {
"name": "<string>",
"active": True,
"steps": [
{
"target_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"external_number": "<string>",
"timeout_seconds": 62,
"continue_on": [],
"time_condition": "always"
}
],
"schedule_enabled": False,
"schedule_timezone": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: '<string>',
active: true,
steps: [
{
target_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
external_number: '<string>',
timeout_seconds: 62,
continue_on: [],
time_condition: 'always'
}
],
schedule_enabled: false,
schedule_timezone: '<string>'
})
};
fetch('https://app.famulor.io/api/v1/loop/routing-rules/{id}', 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/loop/routing-rules/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'name' => '<string>',
'active' => true,
'steps' => [
[
'target_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'external_number' => '<string>',
'timeout_seconds' => 62,
'continue_on' => [
],
'time_condition' => 'always'
]
],
'schedule_enabled' => false,
'schedule_timezone' => '<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/loop/routing-rules/{id}"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"active\": true,\n \"steps\": [\n {\n \"target_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"external_number\": \"<string>\",\n \"timeout_seconds\": 62,\n \"continue_on\": [],\n \"time_condition\": \"always\"\n }\n ],\n \"schedule_enabled\": false,\n \"schedule_timezone\": \"<string>\"\n}")
req, _ := http.NewRequest("PATCH", 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.patch("https://app.famulor.io/api/v1/loop/routing-rules/{id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"active\": true,\n \"steps\": [\n {\n \"target_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"external_number\": \"<string>\",\n \"timeout_seconds\": 62,\n \"continue_on\": [],\n \"time_condition\": \"always\"\n }\n ],\n \"schedule_enabled\": false,\n \"schedule_timezone\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.famulor.io/api/v1/loop/routing-rules/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"active\": true,\n \"steps\": [\n {\n \"target_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"external_number\": \"<string>\",\n \"timeout_seconds\": 62,\n \"continue_on\": [],\n \"time_condition\": \"always\"\n }\n ],\n \"schedule_enabled\": false,\n \"schedule_timezone\": \"<string>\"\n}"
response = http.request(request)
puts response.read_bodyAuthorizations
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, 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
Workspace-scoped Loop resource ID.
Body
1 - 1201 - 25 elementsShow child attributes
Show child attributes
IANA timezone, or null to inherit the workspace timezone.
Show child attributes
Show child attributes
Response
Updated routing rule.
Show child attributes
Show child attributes