Create annotation

Adds a human annotation to a trace or observation, optionally in a review queue.

POST /v1/o11y/llm/annotation

Addresshttps://api.hanzo.ai/v1/o11y/llm/annotation
MethodPOST
OperationCreateLLMAnnotation
AuthAuthorization: Bearer $HANZO_API_KEY

Adds a human annotation to a trace or observation, optionally in a review queue.

Callers need the editor role; the runtime's own gate enforces it, and it validates the payload and stamps the annotation's author and org.

Request

5 fields, body application/json (required).

FieldInTypeRequiredDescription
contentbodystring—Content is the note itself.
observationIdbodystring—ObservationID is the single observation the annotation attaches to, when narrowed to one.
queuebodystring—Queue is the review queue to file the annotation in.
statusbodystring—Status is the annotation's initial review status.
traceIdbodystring—TraceID is the trace the annotation attaches to.

Response

StatusBodyMeaning
201o11y.O11yLLMAnnotationOutcreated
202Approvalheld for approval
defaultproblem-detailsrefused

201 body — 11 fields.

FieldInTypeAlwaysDescription
databodyo11y.O11yLLMAnnotation—
data.authorbodystring—Author is who wrote it.
data.contentbodystring—Content is the note itself.
data.createdAtbodystring (date-time)—CreatedAt is when the annotation was stored.
data.idbodystring—ID is the annotation's id.
data.observationIdbodystring—ObservationID is the observation the annotation attaches to, when narrowed.
data.queuebodystring—Queue is the review queue the annotation sits in, when queued.
data.statusbodystring—Status is the annotation's review status, e.g. PENDING.
data.traceIdbodystring—TraceID is the trace the annotation attaches to.
data.updatedAtbodystring (date-time)—UpdatedAt is when the annotation last changed.
statusbodystring—Status is "success".

Failure carries the platform error shape — see Errors.

Examples

hanzo o11y llm annotation create
import { Configuration, O11yApi } from 'hanzoai';

const api = new O11yApi(new Configuration({ accessToken: process.env.HANZO_API_KEY }));
const { data } = await api.createLLMAnnotation({ content: "<content>", observationId: "<observationId>" });
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).create_llm_annotation(content="<content>", observation_id="<observationId>")
cfg := hanzoai.NewConfiguration()
cfg.AddDefaultHeader("Authorization", "Bearer "+os.Getenv("HANZO_API_KEY"))
client := hanzoai.NewAPIClient(cfg)

resp, _, err := client.O11yAPI.CreateLLMAnnotation(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::create_llm_annotation(&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).createLLMAnnotation();
curl -X POST https://api.hanzo.ai/v1/o11y/llm/annotation \
  -H "Authorization: Bearer $HANZO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
       "content": "<content>",
       "observationId": "<observationId>"
     }'

Tool o11y, op CreateLLMAnnotation — POST the JSON-RPC envelope to https://api.hanzo.ai/v1/mcp.

curl -X POST https://api.hanzo.ai/v1/mcp \
  -H "Authorization: Bearer $HANZO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
       "jsonrpc": "2.0",
       "id": 1,
       "method": "tools/call",
       "params": {
         "name": "o11y",
         "arguments": {
           "op": "CreateLLMAnnotation",
           "input": {
             "content": "<content>",
             "observationId": "<observationId>"
           }
         }
       }
     }'

O11y API · All Hanzo APIs · Interactive reference

Was this page useful?