Change a panel (members)
curl --request PATCH \
--url https://api.apsio.io/v1/projects/{projectId}/dashboards/{dashboardId}/panels/{panelId} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"title": "<string>",
"sql": "<string>",
"preset": "<string>",
"params": {}
}
'import requests
url = "https://api.apsio.io/v1/projects/{projectId}/dashboards/{dashboardId}/panels/{panelId}"
payload = {
"title": "<string>",
"sql": "<string>",
"preset": "<string>",
"params": {}
}
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({title: '<string>', sql: '<string>', preset: '<string>', params: {}})
};
fetch('https://api.apsio.io/v1/projects/{projectId}/dashboards/{dashboardId}/panels/{panelId}', 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.apsio.io/v1/projects/{projectId}/dashboards/{dashboardId}/panels/{panelId}",
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([
'title' => '<string>',
'sql' => '<string>',
'preset' => '<string>',
'params' => [
]
]),
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://api.apsio.io/v1/projects/{projectId}/dashboards/{dashboardId}/panels/{panelId}"
payload := strings.NewReader("{\n \"title\": \"<string>\",\n \"sql\": \"<string>\",\n \"preset\": \"<string>\",\n \"params\": {}\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://api.apsio.io/v1/projects/{projectId}/dashboards/{dashboardId}/panels/{panelId}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"title\": \"<string>\",\n \"sql\": \"<string>\",\n \"preset\": \"<string>\",\n \"params\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.apsio.io/v1/projects/{projectId}/dashboards/{dashboardId}/panels/{panelId}")
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 \"title\": \"<string>\",\n \"sql\": \"<string>\",\n \"preset\": \"<string>\",\n \"params\": {}\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"dashboard_id": "<string>",
"kind": "sql",
"title": "<string>",
"sql": "<string>",
"preset": "<string>",
"params": {},
"chart": {},
"layout": {},
"updated_by": "<string>",
"updated_via": "console",
"created_at": "<string>",
"updated_at": "<string>"
}{
"error": {
"code": "invalid_request",
"message": "<string>"
}
}{
"error": {
"code": "invalid_request",
"message": "<string>"
}
}{
"error": {
"code": "invalid_request",
"message": "<string>"
}
}{
"error": {
"code": "invalid_request",
"message": "<string>"
}
}{
"error": {
"code": "invalid_request",
"message": "<string>"
}
}{
"error": {
"code": "invalid_request",
"message": "<string>"
}
}{
"error": {
"code": "invalid_request",
"message": "<string>"
}
}API reference
Change a panel (members)
PATCH
/
projects
/
{projectId}
/
dashboards
/
{dashboardId}
/
panels
/
{panelId}
Change a panel (members)
curl --request PATCH \
--url https://api.apsio.io/v1/projects/{projectId}/dashboards/{dashboardId}/panels/{panelId} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"title": "<string>",
"sql": "<string>",
"preset": "<string>",
"params": {}
}
'import requests
url = "https://api.apsio.io/v1/projects/{projectId}/dashboards/{dashboardId}/panels/{panelId}"
payload = {
"title": "<string>",
"sql": "<string>",
"preset": "<string>",
"params": {}
}
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({title: '<string>', sql: '<string>', preset: '<string>', params: {}})
};
fetch('https://api.apsio.io/v1/projects/{projectId}/dashboards/{dashboardId}/panels/{panelId}', 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.apsio.io/v1/projects/{projectId}/dashboards/{dashboardId}/panels/{panelId}",
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([
'title' => '<string>',
'sql' => '<string>',
'preset' => '<string>',
'params' => [
]
]),
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://api.apsio.io/v1/projects/{projectId}/dashboards/{dashboardId}/panels/{panelId}"
payload := strings.NewReader("{\n \"title\": \"<string>\",\n \"sql\": \"<string>\",\n \"preset\": \"<string>\",\n \"params\": {}\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://api.apsio.io/v1/projects/{projectId}/dashboards/{dashboardId}/panels/{panelId}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"title\": \"<string>\",\n \"sql\": \"<string>\",\n \"preset\": \"<string>\",\n \"params\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.apsio.io/v1/projects/{projectId}/dashboards/{dashboardId}/panels/{panelId}")
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 \"title\": \"<string>\",\n \"sql\": \"<string>\",\n \"preset\": \"<string>\",\n \"params\": {}\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"dashboard_id": "<string>",
"kind": "sql",
"title": "<string>",
"sql": "<string>",
"preset": "<string>",
"params": {},
"chart": {},
"layout": {},
"updated_by": "<string>",
"updated_via": "console",
"created_at": "<string>",
"updated_at": "<string>"
}{
"error": {
"code": "invalid_request",
"message": "<string>"
}
}{
"error": {
"code": "invalid_request",
"message": "<string>"
}
}{
"error": {
"code": "invalid_request",
"message": "<string>"
}
}{
"error": {
"code": "invalid_request",
"message": "<string>"
}
}{
"error": {
"code": "invalid_request",
"message": "<string>"
}
}{
"error": {
"code": "invalid_request",
"message": "<string>"
}
}{
"error": {
"code": "invalid_request",
"message": "<string>"
}
}Authorizations
bearersession
A project token (apsio_pt_v0...), which reads exactly one project, or an OAuth access token issued for the API, which reads what its user can. Access tokens issued for Apsio's MCP server are accepted only from the MCP server itself.
Path Parameters
Pattern:
^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$Example:
"0192f3a4-0000-7000-8000-00000000a101"
Pattern:
^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$Example:
"0192f3a4-0000-7000-8000-00000000d001"
Pattern:
^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$Example:
"0192f3a4-0000-7000-8000-00000000d001"
Body
application/json
Available options:
sql, preset Required string length:
1 - 100Required string length:
1 - 10000Maximum string length:
64Show child attributes
Show child attributes
Show child attributes
Show child attributes
Its place on a grid 12 columns wide.
Show child attributes
Show child attributes
Response
Changed.
Available options:
sql, preset Untrusted text: render it as text.
Untrusted text, as written.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Available options:
console, token, oauth, mcp