Create span percentile

Places one span's duration among its peers: the p50/p90/p99 durations of like spans, and the percentile the given duration lands at.

POST /v1/o11y/span_percentile

Addresshttps://api.hanzo.ai/v1/o11y/span_percentile
MethodPOST
Operationpost_o11y_span_percentile
AuthAuthorization: Bearer $HANZO_API_KEY

Places one span's duration among its peers: the p50/p90/p99 durations of like spans, and the percentile the given duration lands at.

Callers need the viewer role; the runtime's own gate enforces it.

Request

7 fields, body application/json (required).

FieldInTypeRequiredDescription
endbodyinteger (uint64)—End is the window end, as epoch nanoseconds.
namebodystringyesName is the span name whose peers are compared.
resourceAttributesbodyobject—ResourceAttributes narrow the peer group to spans carrying them all.
resourceAttributes.*bodystring—
serviceNamebodystringyesServiceName is the service the span belongs to.
spanDurationbodyinteger (int64)—SpanDuration is the span's duration in nanoseconds.
startbodyinteger (uint64)—Start is the window start, as epoch nanoseconds.

Response

StatusBodyMeaning
200o11y.O11ySpanPercentileOutok
202Approvalheld for approval
defaultproblem-detailsrefused

200 body — 9 fields.

FieldInTypeAlwaysDescription
databodyo11y.O11ySpanPercentile—
data.percentilesbodyo11y.O11yPercentiles—
data.percentiles.p50bodynumber (double)—P50 is the median.
data.percentiles.p90bodynumber (double)—P90 is the 90th percentile.
data.percentiles.p99bodynumber (double)—P99 is the 99th percentile.
data.positionbodyo11y.O11yPercentilePosition—
data.position.descriptionbodystring—Description says the same in words.
data.position.percentilebodynumber (double)—Percentile is the percentile the duration lands at.
statusbodystring—Status is "success".

Failure carries the platform error shape — see Errors.

Examples

hanzo o11y span_percentile \
  --name <name> \
  --service-name <serviceName>
import { Configuration, O11yApi } from 'hanzoai';

const api = new O11yApi(new Configuration({ accessToken: process.env.HANZO_API_KEY }));
const { data } = await api.postO11ySpanPercentile({ name: "<name>", serviceName: "<serviceName>" });
from hanzoai.cloud import ApiClient, Configuration
from hanzoai.cloud.api import O11yApi

client = ApiClient(Configuration(access_token=os.environ["HANZO_API_KEY"]))
result = O11yApi(client).post_o11y_span_percentile(name="<name>", service_name="<serviceName>")
cfg := hanzoai.NewConfiguration()
cfg.AddDefaultHeader("Authorization", "Bearer "+os.Getenv("HANZO_API_KEY"))
client := hanzoai.NewAPIClient(cfg)

resp, _, err := client.O11yAPI.PostO11ySpanPercentile(context.Background()).Execute()
if err != nil {
	return err
}
use hanzo_client::apis::{configuration::Configuration, o11y_api};

let mut cfg = Configuration::new();
cfg.bearer_access_token = std::env::var("HANZO_API_KEY").ok();

let result = o11y_api::post_o11y_span_percentile(&cfg, Default::default()).await?;
import ai.hanzo.cloud.ApiClient;
import ai.hanzo.cloud.api.O11yApi;

ApiClient client = new ApiClient();
client.setBearerToken(System.getenv("HANZO_API_KEY"));

var result = new O11yApi(client).postO11ySpanPercentile();
curl -X POST https://api.hanzo.ai/v1/o11y/span_percentile \
  -H "Authorization: Bearer $HANZO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
       "name": "<name>",
       "serviceName": "<serviceName>"
     }'

MCP reaches o11y through the o11y tool, which names its 307 operations with its own verbs — this one among them, under a name only MCP declares. describe explains any of them:

curl -X POST https://api.hanzo.ai/v1/mcp \
  -H "Content-Type: application/json" \
  -d '{
       "jsonrpc": "2.0",
       "id": 1,
       "method": "tools/call",
       "params": {
         "name": "describe",
         "arguments": {
           "op": "list_o11y_autocomplete_aggregate_attributes"
         }
       }
     }'

O11y API · All Hanzo APIs · Interactive reference

Was this page useful?