Get plugin call stats
curl --request GET \
--url https://api.example.com/v0/admin/stats/plugins \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.example.com/v0/admin/stats/plugins"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.example.com/v0/admin/stats/plugins', 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.example.com/v0/admin/stats/plugins",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.example.com/v0/admin/stats/plugins"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.example.com/v0/admin/stats/plugins")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/v0/admin/stats/plugins")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"window": "1h",
"resolution_seconds": 2,
"from": "2023-11-07T05:31:56Z",
"to": "2023-11-07T05:31:56Z",
"items": [
{
"plugin_id": "<string>",
"plugin_version": "<string>",
"operation": "normalize",
"summary": {
"count": 1,
"errors": 1,
"p50_ms": 1,
"p95_ms": 1,
"mean_ms": 1,
"last_error_code": "<string>",
"last_error_at": "2023-11-07T05:31:56Z"
},
"points": [
{
"start": "2023-11-07T05:31:56Z",
"count": 2,
"errors": 1,
"p50_ms": 1,
"p95_ms": 1
}
]
}
]
}{
"code": "<string>",
"message": "<string>",
"retryable": true,
"field": "<string>",
"resync_url": "<string>"
}Admin
Get plugin call stats
Calls, errors and latency of every plugin Contribution invoked for the key’s Organization over the window, per plugin version and operation, with the last error code the plugin declared (or plugin_unavailable, invalid_output). Counts are written by each process every few seconds and kept 7 days; a window reads buckets of one resolution (1 minute for 1h, 15 minutes for 24h, 2 hours for 7d) and lists only non-empty ones. Latency percentiles are interpolated from fixed buckets. Requires observability:read on a key that grants every Corpus.
GET
/
v0
/
admin
/
stats
/
plugins
Get plugin call stats
curl --request GET \
--url https://api.example.com/v0/admin/stats/plugins \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.example.com/v0/admin/stats/plugins"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.example.com/v0/admin/stats/plugins', 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.example.com/v0/admin/stats/plugins",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.example.com/v0/admin/stats/plugins"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.example.com/v0/admin/stats/plugins")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/v0/admin/stats/plugins")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"window": "1h",
"resolution_seconds": 2,
"from": "2023-11-07T05:31:56Z",
"to": "2023-11-07T05:31:56Z",
"items": [
{
"plugin_id": "<string>",
"plugin_version": "<string>",
"operation": "normalize",
"summary": {
"count": 1,
"errors": 1,
"p50_ms": 1,
"p95_ms": 1,
"mean_ms": 1,
"last_error_code": "<string>",
"last_error_at": "2023-11-07T05:31:56Z"
},
"points": [
{
"start": "2023-11-07T05:31:56Z",
"count": 2,
"errors": 1,
"p50_ms": 1,
"p95_ms": 1
}
]
}
]
}{
"code": "<string>",
"message": "<string>",
"retryable": true,
"field": "<string>",
"resync_url": "<string>"
}Authorizations
API key, not necessarily a JWT. Server derives Organization, permitted actions and Corpus scope; every resource access is authorized.
Query Parameters
Available options:
1h, 24h, 7d