curl --request PATCH \
--url https://api.topograph.co/v2/billing/notifications/workspaces/{workspaceId}/config \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"highUsageEnabled": true,
"highUsageEmailEnabled": true,
"highUsageWebhookEnabled": true,
"highUsagePeriodMinutes": 1440,
"highUsageTiers": [
{
"tier": "warning",
"cents": 100000
}
]
}
'import requests
url = "https://api.topograph.co/v2/billing/notifications/workspaces/{workspaceId}/config"
payload = {
"highUsageEnabled": True,
"highUsageEmailEnabled": True,
"highUsageWebhookEnabled": True,
"highUsagePeriodMinutes": 1440,
"highUsageTiers": [
{
"tier": "warning",
"cents": 100000
}
]
}
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({
highUsageEnabled: true,
highUsageEmailEnabled: true,
highUsageWebhookEnabled: true,
highUsagePeriodMinutes: 1440,
highUsageTiers: [{tier: 'warning', cents: 100000}]
})
};
fetch('https://api.topograph.co/v2/billing/notifications/workspaces/{workspaceId}/config', 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.topograph.co/v2/billing/notifications/workspaces/{workspaceId}/config",
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([
'highUsageEnabled' => true,
'highUsageEmailEnabled' => true,
'highUsageWebhookEnabled' => true,
'highUsagePeriodMinutes' => 1440,
'highUsageTiers' => [
[
'tier' => 'warning',
'cents' => 100000
]
]
]),
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.topograph.co/v2/billing/notifications/workspaces/{workspaceId}/config"
payload := strings.NewReader("{\n \"highUsageEnabled\": true,\n \"highUsageEmailEnabled\": true,\n \"highUsageWebhookEnabled\": true,\n \"highUsagePeriodMinutes\": 1440,\n \"highUsageTiers\": [\n {\n \"tier\": \"warning\",\n \"cents\": 100000\n }\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.topograph.co/v2/billing/notifications/workspaces/{workspaceId}/config")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"highUsageEnabled\": true,\n \"highUsageEmailEnabled\": true,\n \"highUsageWebhookEnabled\": true,\n \"highUsagePeriodMinutes\": 1440,\n \"highUsageTiers\": [\n {\n \"tier\": \"warning\",\n \"cents\": 100000\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.topograph.co/v2/billing/notifications/workspaces/{workspaceId}/config")
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 \"highUsageEnabled\": true,\n \"highUsageEmailEnabled\": true,\n \"highUsageWebhookEnabled\": true,\n \"highUsagePeriodMinutes\": 1440,\n \"highUsageTiers\": [\n {\n \"tier\": \"warning\",\n \"cents\": 100000\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"id": "f2b5e0b8-1a3c-4f7e-9d2a-7c6b8a1d4e52",
"workspaceId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"createdAt": "2026-04-15T12:34:56.789Z",
"updatedAt": "2026-04-22T08:12:34.567Z",
"highUsageEnabled": true,
"highUsageEmailEnabled": true,
"highUsageWebhookEnabled": true,
"highUsagePeriodMinutes": 720,
"highUsageTiers": [
{
"tier": "warning",
"cents": 100000
}
]
}Upsert workspace high-usage override
curl --request PATCH \
--url https://api.topograph.co/v2/billing/notifications/workspaces/{workspaceId}/config \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"highUsageEnabled": true,
"highUsageEmailEnabled": true,
"highUsageWebhookEnabled": true,
"highUsagePeriodMinutes": 1440,
"highUsageTiers": [
{
"tier": "warning",
"cents": 100000
}
]
}
'import requests
url = "https://api.topograph.co/v2/billing/notifications/workspaces/{workspaceId}/config"
payload = {
"highUsageEnabled": True,
"highUsageEmailEnabled": True,
"highUsageWebhookEnabled": True,
"highUsagePeriodMinutes": 1440,
"highUsageTiers": [
{
"tier": "warning",
"cents": 100000
}
]
}
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({
highUsageEnabled: true,
highUsageEmailEnabled: true,
highUsageWebhookEnabled: true,
highUsagePeriodMinutes: 1440,
highUsageTiers: [{tier: 'warning', cents: 100000}]
})
};
fetch('https://api.topograph.co/v2/billing/notifications/workspaces/{workspaceId}/config', 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.topograph.co/v2/billing/notifications/workspaces/{workspaceId}/config",
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([
'highUsageEnabled' => true,
'highUsageEmailEnabled' => true,
'highUsageWebhookEnabled' => true,
'highUsagePeriodMinutes' => 1440,
'highUsageTiers' => [
[
'tier' => 'warning',
'cents' => 100000
]
]
]),
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.topograph.co/v2/billing/notifications/workspaces/{workspaceId}/config"
payload := strings.NewReader("{\n \"highUsageEnabled\": true,\n \"highUsageEmailEnabled\": true,\n \"highUsageWebhookEnabled\": true,\n \"highUsagePeriodMinutes\": 1440,\n \"highUsageTiers\": [\n {\n \"tier\": \"warning\",\n \"cents\": 100000\n }\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.topograph.co/v2/billing/notifications/workspaces/{workspaceId}/config")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"highUsageEnabled\": true,\n \"highUsageEmailEnabled\": true,\n \"highUsageWebhookEnabled\": true,\n \"highUsagePeriodMinutes\": 1440,\n \"highUsageTiers\": [\n {\n \"tier\": \"warning\",\n \"cents\": 100000\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.topograph.co/v2/billing/notifications/workspaces/{workspaceId}/config")
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 \"highUsageEnabled\": true,\n \"highUsageEmailEnabled\": true,\n \"highUsageWebhookEnabled\": true,\n \"highUsagePeriodMinutes\": 1440,\n \"highUsageTiers\": [\n {\n \"tier\": \"warning\",\n \"cents\": 100000\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"id": "f2b5e0b8-1a3c-4f7e-9d2a-7c6b8a1d4e52",
"workspaceId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"createdAt": "2026-04-15T12:34:56.789Z",
"updatedAt": "2026-04-22T08:12:34.567Z",
"highUsageEnabled": true,
"highUsageEmailEnabled": true,
"highUsageWebhookEnabled": true,
"highUsagePeriodMinutes": 720,
"highUsageTiers": [
{
"tier": "warning",
"cents": 100000
}
]
}Authorizations
Path Parameters
Body
Override the account-level master toggle for per-workspace high-usage notifications. Undefined means "inherit from account config".
true
Override the account-level email routing for high-usage notifications for this workspace.
true
Override the account-level webhook routing for high-usage notifications for this workspace.
true
Override the rolling window, in minutes, used to sum this workspace's spend when evaluating high-usage tiers. Min 5, max 43200.
5 <= x <= 432001440
Override the high-usage tiers for this workspace specifically. Fires when the workspace spend over the rolling window meets-or-exceeds cents. Tier names must be unique.
1 - 5 elementsShow child attributes
Show child attributes
Response
Override row ID.
"f2b5e0b8-1a3c-4f7e-9d2a-7c6b8a1d4e52"
Workspace ID this override applies to.
"a1b2c3d4-e5f6-7890-abcd-ef1234567890"
Row creation timestamp.
"2026-04-15T12:34:56.789Z"
Row last-update timestamp.
"2026-04-22T08:12:34.567Z"
Override for master high-usage toggle. Null means "inherit".
true
Override for email routing. Null means "inherit".
true
Override for webhook routing. Null means "inherit".
true
Override for rolling window minutes. Null means "inherit".
720
Override for tier thresholds. Null means "inherit".
Show child attributes
Show child attributes