curl --request PATCH \
--url https://api.getdialed.ai/v1/platforms/five9/domains/{tenancy_id} \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"lane_order": {
"compliance": [
"five9__configuration_service__add_numbers_to_dnc"
]
},
"lane_overrides": {
"five9__configuration_service__add_to_list": "bulk"
},
"margins": {
"Upload": 80
}
}
'import requests
url = "https://api.getdialed.ai/v1/platforms/five9/domains/{tenancy_id}"
payload = {
"lane_order": { "compliance": ["five9__configuration_service__add_numbers_to_dnc"] },
"lane_overrides": { "five9__configuration_service__add_to_list": "bulk" },
"margins": { "Upload": 80 }
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
lane_order: {compliance: ['five9__configuration_service__add_numbers_to_dnc']},
lane_overrides: {five9__configuration_service__add_to_list: 'bulk'},
margins: {Upload: 80}
})
};
fetch('https://api.getdialed.ai/v1/platforms/five9/domains/{tenancy_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://api.getdialed.ai/v1/platforms/five9/domains/{tenancy_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([
'lane_order' => [
'compliance' => [
'five9__configuration_service__add_numbers_to_dnc'
]
],
'lane_overrides' => [
'five9__configuration_service__add_to_list' => 'bulk'
],
'margins' => [
'Upload' => 80
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-Key: <api-key>"
],
]);
$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://api.getdialed.ai/v1/platforms/five9/domains/{tenancy_id}"
payload := strings.NewReader("{\n \"lane_order\": {\n \"compliance\": [\n \"five9__configuration_service__add_numbers_to_dnc\"\n ]\n },\n \"lane_overrides\": {\n \"five9__configuration_service__add_to_list\": \"bulk\"\n },\n \"margins\": {\n \"Upload\": 80\n }\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
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://api.getdialed.ai/v1/platforms/five9/domains/{tenancy_id}")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"lane_order\": {\n \"compliance\": [\n \"five9__configuration_service__add_numbers_to_dnc\"\n ]\n },\n \"lane_overrides\": {\n \"five9__configuration_service__add_to_list\": \"bulk\"\n },\n \"margins\": {\n \"Upload\": 80\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.getdialed.ai/v1/platforms/five9/domains/{tenancy_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"lane_order\": {\n \"compliance\": [\n \"five9__configuration_service__add_numbers_to_dnc\"\n ]\n },\n \"lane_overrides\": {\n \"five9__configuration_service__add_to_list\": \"bulk\"\n },\n \"margins\": {\n \"Upload\": 80\n }\n}"
response = http.request(request)
puts response.read_body{
"api_host": "api.five9.com",
"bucket_map": {
"five9__configuration_service__add_to_list": {
"operation_types": [
"Upload"
],
"resolved": true
}
},
"buckets": {
"Upload": {
"caps": {
"60": 20,
"3600": 400,
"86400": 2000
},
"effective": {
"60": 16,
"3600": 320,
"86400": 1600
},
"label": "Uploading (batch)",
"margin_pct": 80,
"max_records_per_request": 50000,
"min_interval_ms": 250,
"observed_at": "2026-07-25T18:00:00Z",
"source": "live"
}
},
"counters_synced_at": "2026-07-25T18:00:00Z",
"created_at": "2026-07-25T17:00:00Z",
"domain_id": "100200",
"domain_name": "Acme Corp",
"id": "ten_9f2c1a7b3d4e5f60",
"lane_order": {
"bulk": [
"five9__configuration_service__add_to_list"
]
},
"lane_overrides": {
"five9__configuration_service__add_to_list": "bulk"
},
"org_id": "org_a1b2c3d4",
"platform_id": "five9",
"status": "active",
"sync_status": "live",
"tenancy_unit": {
"key_field": "domain_id",
"key_source": "getVCCConfiguration.domainId",
"name": "Domain",
"plural": "Domains"
},
"updated_at": "2026-07-25T18:00:00Z"
}{
"detail": "Authentication required"
}{
"detail": "Admin role required"
}{
"detail": "Domain not found"
}{
"detail": "margins['Upload'] must be between 1 and 100"
}{
"detail": "Rate limit exceeded: 100 per 1 minute"
}Update a Five9 Domain's margins and lanes
Admin only. Three independent edits, any subset per request:
margins— a per-rate-bucket safety margin as a percentage of the provider cap. DOWNWARD-ONLY: values outside 1–100 are rejected, because a margin above the provider cap would hand out budget Five9 never granted, and a 0% margin is a permanent outage. Only the named buckets’ margins are written; the rawcapsare never touched.lane_overrides— move one action into a different named dispatch lane for this Domain.lane_order— fix the deterministic ordering of actions within a lane (an ordered list, not numeric weights).
Every referenced action id is re-validated against the catalog. An empty body is a no-op. Explicit JSON null is rejected — omit a field to leave it unchanged. Cross-tenant access returns 404, never 403.
curl --request PATCH \
--url https://api.getdialed.ai/v1/platforms/five9/domains/{tenancy_id} \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"lane_order": {
"compliance": [
"five9__configuration_service__add_numbers_to_dnc"
]
},
"lane_overrides": {
"five9__configuration_service__add_to_list": "bulk"
},
"margins": {
"Upload": 80
}
}
'import requests
url = "https://api.getdialed.ai/v1/platforms/five9/domains/{tenancy_id}"
payload = {
"lane_order": { "compliance": ["five9__configuration_service__add_numbers_to_dnc"] },
"lane_overrides": { "five9__configuration_service__add_to_list": "bulk" },
"margins": { "Upload": 80 }
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
lane_order: {compliance: ['five9__configuration_service__add_numbers_to_dnc']},
lane_overrides: {five9__configuration_service__add_to_list: 'bulk'},
margins: {Upload: 80}
})
};
fetch('https://api.getdialed.ai/v1/platforms/five9/domains/{tenancy_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://api.getdialed.ai/v1/platforms/five9/domains/{tenancy_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([
'lane_order' => [
'compliance' => [
'five9__configuration_service__add_numbers_to_dnc'
]
],
'lane_overrides' => [
'five9__configuration_service__add_to_list' => 'bulk'
],
'margins' => [
'Upload' => 80
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-Key: <api-key>"
],
]);
$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://api.getdialed.ai/v1/platforms/five9/domains/{tenancy_id}"
payload := strings.NewReader("{\n \"lane_order\": {\n \"compliance\": [\n \"five9__configuration_service__add_numbers_to_dnc\"\n ]\n },\n \"lane_overrides\": {\n \"five9__configuration_service__add_to_list\": \"bulk\"\n },\n \"margins\": {\n \"Upload\": 80\n }\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
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://api.getdialed.ai/v1/platforms/five9/domains/{tenancy_id}")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"lane_order\": {\n \"compliance\": [\n \"five9__configuration_service__add_numbers_to_dnc\"\n ]\n },\n \"lane_overrides\": {\n \"five9__configuration_service__add_to_list\": \"bulk\"\n },\n \"margins\": {\n \"Upload\": 80\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.getdialed.ai/v1/platforms/five9/domains/{tenancy_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"lane_order\": {\n \"compliance\": [\n \"five9__configuration_service__add_numbers_to_dnc\"\n ]\n },\n \"lane_overrides\": {\n \"five9__configuration_service__add_to_list\": \"bulk\"\n },\n \"margins\": {\n \"Upload\": 80\n }\n}"
response = http.request(request)
puts response.read_body{
"api_host": "api.five9.com",
"bucket_map": {
"five9__configuration_service__add_to_list": {
"operation_types": [
"Upload"
],
"resolved": true
}
},
"buckets": {
"Upload": {
"caps": {
"60": 20,
"3600": 400,
"86400": 2000
},
"effective": {
"60": 16,
"3600": 320,
"86400": 1600
},
"label": "Uploading (batch)",
"margin_pct": 80,
"max_records_per_request": 50000,
"min_interval_ms": 250,
"observed_at": "2026-07-25T18:00:00Z",
"source": "live"
}
},
"counters_synced_at": "2026-07-25T18:00:00Z",
"created_at": "2026-07-25T17:00:00Z",
"domain_id": "100200",
"domain_name": "Acme Corp",
"id": "ten_9f2c1a7b3d4e5f60",
"lane_order": {
"bulk": [
"five9__configuration_service__add_to_list"
]
},
"lane_overrides": {
"five9__configuration_service__add_to_list": "bulk"
},
"org_id": "org_a1b2c3d4",
"platform_id": "five9",
"status": "active",
"sync_status": "live",
"tenancy_unit": {
"key_field": "domain_id",
"key_source": "getVCCConfiguration.domainId",
"name": "Domain",
"plural": "Domains"
},
"updated_at": "2026-07-25T18:00:00Z"
}{
"detail": "Authentication required"
}{
"detail": "Admin role required"
}{
"detail": "Domain not found"
}{
"detail": "margins['Upload'] must be between 1 and 100"
}{
"detail": "Rate limit exceeded: 100 per 1 minute"
}Authorizations
Path Parameters
Body
Admin edits to a Domain: per-bucket safety margins and lane placement.
All three fields are optional and an omitted field is left untouched rather
than cleared. margins is keyed on the rate bucket (the provider's own
operation-type name), so a safety margin can be applied to one bucket
without affecting the others; values are a percentage of the provider cap
and are downward-only. lane_overrides moves one action into a different
named dispatch lane for this Domain, and lane_order fixes the order
actions run in within a lane as an ordered list of action ids rather than
numeric weights.
Response
Successful Response
One Five9 Domain: the provider-tenant record that anchors rate limits.
N Connections resolving to the same Domain share ONE quota budget. Each
rate bucket reports the provider's raw caps per time window, the
operator's margin_pct safety margin, and the effective budget computed
from both. min_interval_ms is the minimum spacing enforced between two
consecutive calls on the bucket — a floor applied on top of the window
budget, so a bucket well inside its hourly cap can still be paced; null
means no explicit floor, and the margin is not applied to it. tenancy_unit
carries the platform's own vocabulary for this
record so it can be labelled correctly without a second lookup, and
sync_status reports whether the caps are provider-observed (live),
catalog defaults (catalog_default), or unchanged after a refresh returned
unusable counters (stale).
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes