curl --request PUT \
--url https://api.eu.bronto.io/widgets/{id} \
--header 'Content-Type: application/json' \
--header 'X-BRONTO-API-KEY: <api-key>' \
--data '
{
"name": "5xx errors by service",
"type": "treemap",
"description": "This widget shows the 5xx errors by service",
"aux": {},
"sources": [
{
"type": "metric",
"id": "7a1c4e2b-0d3f-4a5b-8c6d-9e0f1a2b3c4d"
},
{
"type": "slo",
"id": "91bd5a3e-2c4f-4d6a-8b0c-2e4f6a8c0d1e"
}
],
"metric_ids": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"widget_ids": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
]
}
'import requests
url = "https://api.eu.bronto.io/widgets/{id}"
payload = {
"name": "5xx errors by service",
"type": "treemap",
"description": "This widget shows the 5xx errors by service",
"aux": {},
"sources": [
{
"type": "metric",
"id": "7a1c4e2b-0d3f-4a5b-8c6d-9e0f1a2b3c4d"
},
{
"type": "slo",
"id": "91bd5a3e-2c4f-4d6a-8b0c-2e4f6a8c0d1e"
}
],
"metric_ids": ["3c90c3cc-0d44-4b50-8888-8dd25736052a"],
"widget_ids": ["3c90c3cc-0d44-4b50-8888-8dd25736052a"]
}
headers = {
"X-BRONTO-API-KEY": "<api-key>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {'X-BRONTO-API-KEY': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: '5xx errors by service',
type: 'treemap',
description: 'This widget shows the 5xx errors by service',
aux: {},
sources: [
{type: 'metric', id: '7a1c4e2b-0d3f-4a5b-8c6d-9e0f1a2b3c4d'},
{type: 'slo', id: '91bd5a3e-2c4f-4d6a-8b0c-2e4f6a8c0d1e'}
],
metric_ids: ['3c90c3cc-0d44-4b50-8888-8dd25736052a'],
widget_ids: ['3c90c3cc-0d44-4b50-8888-8dd25736052a']
})
};
fetch('https://api.eu.bronto.io/widgets/{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.eu.bronto.io/widgets/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'name' => '5xx errors by service',
'type' => 'treemap',
'description' => 'This widget shows the 5xx errors by service',
'aux' => [
],
'sources' => [
[
'type' => 'metric',
'id' => '7a1c4e2b-0d3f-4a5b-8c6d-9e0f1a2b3c4d'
],
[
'type' => 'slo',
'id' => '91bd5a3e-2c4f-4d6a-8b0c-2e4f6a8c0d1e'
]
],
'metric_ids' => [
'3c90c3cc-0d44-4b50-8888-8dd25736052a'
],
'widget_ids' => [
'3c90c3cc-0d44-4b50-8888-8dd25736052a'
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-BRONTO-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.eu.bronto.io/widgets/{id}"
payload := strings.NewReader("{\n \"name\": \"5xx errors by service\",\n \"type\": \"treemap\",\n \"description\": \"This widget shows the 5xx errors by service\",\n \"aux\": {},\n \"sources\": [\n {\n \"type\": \"metric\",\n \"id\": \"7a1c4e2b-0d3f-4a5b-8c6d-9e0f1a2b3c4d\"\n },\n {\n \"type\": \"slo\",\n \"id\": \"91bd5a3e-2c4f-4d6a-8b0c-2e4f6a8c0d1e\"\n }\n ],\n \"metric_ids\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"widget_ids\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ]\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("X-BRONTO-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.put("https://api.eu.bronto.io/widgets/{id}")
.header("X-BRONTO-API-KEY", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"5xx errors by service\",\n \"type\": \"treemap\",\n \"description\": \"This widget shows the 5xx errors by service\",\n \"aux\": {},\n \"sources\": [\n {\n \"type\": \"metric\",\n \"id\": \"7a1c4e2b-0d3f-4a5b-8c6d-9e0f1a2b3c4d\"\n },\n {\n \"type\": \"slo\",\n \"id\": \"91bd5a3e-2c4f-4d6a-8b0c-2e4f6a8c0d1e\"\n }\n ],\n \"metric_ids\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"widget_ids\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.eu.bronto.io/widgets/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["X-BRONTO-API-KEY"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"5xx errors by service\",\n \"type\": \"treemap\",\n \"description\": \"This widget shows the 5xx errors by service\",\n \"aux\": {},\n \"sources\": [\n {\n \"type\": \"metric\",\n \"id\": \"7a1c4e2b-0d3f-4a5b-8c6d-9e0f1a2b3c4d\"\n },\n {\n \"type\": \"slo\",\n \"id\": \"91bd5a3e-2c4f-4d6a-8b0c-2e4f6a8c0d1e\"\n }\n ],\n \"metric_ids\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"widget_ids\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"code": 400,
"type": "Bad Request",
"correlation_id": "95c6a974e3ab01209b6b0dfedb1b16c5",
"details": "Validation failed: 'name' field is required and cannot be empty"
}{
"code": 404,
"type": "Not Found",
"correlation_id": "605f832bcfe44a1081441691c8d42253",
"details": "Resource not found."
}{
"code": 429,
"type": "Too Many Requests",
"correlation_id": "53909ed43c544531b7a555e295960437",
"details": "Rate limit exceeded. Maximum 100 requests are allowed within a 5-minute window."
}{
"code": 500,
"type": "Internal Server Error",
"correlation_id": "b129b8e0e66c41aa9541a30f67e38ce2",
"details": "Internal Server Error"
}{
"code": 500,
"type": "Internal Server Error",
"correlation_id": "b129b8e0e66c41aa9541a30f67e38ce2",
"details": "Internal Server Error"
}Update a widget
curl --request PUT \
--url https://api.eu.bronto.io/widgets/{id} \
--header 'Content-Type: application/json' \
--header 'X-BRONTO-API-KEY: <api-key>' \
--data '
{
"name": "5xx errors by service",
"type": "treemap",
"description": "This widget shows the 5xx errors by service",
"aux": {},
"sources": [
{
"type": "metric",
"id": "7a1c4e2b-0d3f-4a5b-8c6d-9e0f1a2b3c4d"
},
{
"type": "slo",
"id": "91bd5a3e-2c4f-4d6a-8b0c-2e4f6a8c0d1e"
}
],
"metric_ids": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"widget_ids": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
]
}
'import requests
url = "https://api.eu.bronto.io/widgets/{id}"
payload = {
"name": "5xx errors by service",
"type": "treemap",
"description": "This widget shows the 5xx errors by service",
"aux": {},
"sources": [
{
"type": "metric",
"id": "7a1c4e2b-0d3f-4a5b-8c6d-9e0f1a2b3c4d"
},
{
"type": "slo",
"id": "91bd5a3e-2c4f-4d6a-8b0c-2e4f6a8c0d1e"
}
],
"metric_ids": ["3c90c3cc-0d44-4b50-8888-8dd25736052a"],
"widget_ids": ["3c90c3cc-0d44-4b50-8888-8dd25736052a"]
}
headers = {
"X-BRONTO-API-KEY": "<api-key>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {'X-BRONTO-API-KEY': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: '5xx errors by service',
type: 'treemap',
description: 'This widget shows the 5xx errors by service',
aux: {},
sources: [
{type: 'metric', id: '7a1c4e2b-0d3f-4a5b-8c6d-9e0f1a2b3c4d'},
{type: 'slo', id: '91bd5a3e-2c4f-4d6a-8b0c-2e4f6a8c0d1e'}
],
metric_ids: ['3c90c3cc-0d44-4b50-8888-8dd25736052a'],
widget_ids: ['3c90c3cc-0d44-4b50-8888-8dd25736052a']
})
};
fetch('https://api.eu.bronto.io/widgets/{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.eu.bronto.io/widgets/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'name' => '5xx errors by service',
'type' => 'treemap',
'description' => 'This widget shows the 5xx errors by service',
'aux' => [
],
'sources' => [
[
'type' => 'metric',
'id' => '7a1c4e2b-0d3f-4a5b-8c6d-9e0f1a2b3c4d'
],
[
'type' => 'slo',
'id' => '91bd5a3e-2c4f-4d6a-8b0c-2e4f6a8c0d1e'
]
],
'metric_ids' => [
'3c90c3cc-0d44-4b50-8888-8dd25736052a'
],
'widget_ids' => [
'3c90c3cc-0d44-4b50-8888-8dd25736052a'
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-BRONTO-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.eu.bronto.io/widgets/{id}"
payload := strings.NewReader("{\n \"name\": \"5xx errors by service\",\n \"type\": \"treemap\",\n \"description\": \"This widget shows the 5xx errors by service\",\n \"aux\": {},\n \"sources\": [\n {\n \"type\": \"metric\",\n \"id\": \"7a1c4e2b-0d3f-4a5b-8c6d-9e0f1a2b3c4d\"\n },\n {\n \"type\": \"slo\",\n \"id\": \"91bd5a3e-2c4f-4d6a-8b0c-2e4f6a8c0d1e\"\n }\n ],\n \"metric_ids\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"widget_ids\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ]\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("X-BRONTO-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.put("https://api.eu.bronto.io/widgets/{id}")
.header("X-BRONTO-API-KEY", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"5xx errors by service\",\n \"type\": \"treemap\",\n \"description\": \"This widget shows the 5xx errors by service\",\n \"aux\": {},\n \"sources\": [\n {\n \"type\": \"metric\",\n \"id\": \"7a1c4e2b-0d3f-4a5b-8c6d-9e0f1a2b3c4d\"\n },\n {\n \"type\": \"slo\",\n \"id\": \"91bd5a3e-2c4f-4d6a-8b0c-2e4f6a8c0d1e\"\n }\n ],\n \"metric_ids\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"widget_ids\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.eu.bronto.io/widgets/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["X-BRONTO-API-KEY"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"5xx errors by service\",\n \"type\": \"treemap\",\n \"description\": \"This widget shows the 5xx errors by service\",\n \"aux\": {},\n \"sources\": [\n {\n \"type\": \"metric\",\n \"id\": \"7a1c4e2b-0d3f-4a5b-8c6d-9e0f1a2b3c4d\"\n },\n {\n \"type\": \"slo\",\n \"id\": \"91bd5a3e-2c4f-4d6a-8b0c-2e4f6a8c0d1e\"\n }\n ],\n \"metric_ids\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"widget_ids\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"code": 400,
"type": "Bad Request",
"correlation_id": "95c6a974e3ab01209b6b0dfedb1b16c5",
"details": "Validation failed: 'name' field is required and cannot be empty"
}{
"code": 404,
"type": "Not Found",
"correlation_id": "605f832bcfe44a1081441691c8d42253",
"details": "Resource not found."
}{
"code": 429,
"type": "Too Many Requests",
"correlation_id": "53909ed43c544531b7a555e295960437",
"details": "Rate limit exceeded. Maximum 100 requests are allowed within a 5-minute window."
}{
"code": 500,
"type": "Internal Server Error",
"correlation_id": "b129b8e0e66c41aa9541a30f67e38ce2",
"details": "Internal Server Error"
}{
"code": 500,
"type": "Internal Server Error",
"correlation_id": "b129b8e0e66c41aa9541a30f67e38ce2",
"details": "Internal Server Error"
}Authorizations
Path Parameters
The unique identifier of the widget to update
Body
The widget name
1 - 255"5xx errors by service"
The widget type
1 - 64"treemap"
The widget description
1 - 1024"This widget shows the 5xx errors by service"
Additional widget configuration
The metrics, monitors and SLOs that supply data to the widget, in display order.
Used by every widget type except group. Cannot be combined with metric_ids or widget_ids.
20Show child attributes
Show child attributes
[
{
"type": "metric",
"id": "7a1c4e2b-0d3f-4a5b-8c6d-9e0f1a2b3c4d"
},
{
"type": "slo",
"id": "91bd5a3e-2c4f-4d6a-8b0c-2e4f6a8c0d1e"
}
]
Deprecated on 2026-10-12 and will be removed on 2027-10-12: use sources
with type: metric. Requests using this field receive Deprecation and
Sunset response headers. Each ID is stored as
{type: metric, id}. Cannot be combined with sources or widget_ids.
20The child widget IDs of a group widget. Required for group widgets and
must be omitted for all other widget types. Cannot be combined with sources or metric_ids.
50Response
Widget successfully updated
