List last

Answers the most recent Alertmanager deliveries THIS process received, as plain text — one greppable ALERT-RECEIVED line per alert, followed by the ALERT-DELIVERED / ALERT-UNDELIVERED outcome of carrying it out of the process, newest last, so piping to tail reads in arrival order.

GET /v1/o11y/alerts/last

Addresshttps://api.hanzo.ai/v1/o11y/alerts/last
MethodGET
Operationget_o11y_alerts_last
AuthAuthorization: Bearer $HANZO_API_KEY

Answers the most recent Alertmanager deliveries THIS process received, as plain text — one greppable ALERT-RECEIVED line per alert, followed by the ALERT-DELIVERED / ALERT-UNDELIVERED outcome of carrying it out of the process, newest last, so piping to tail reads in arrival order. (none) when nothing has landed.

Arrival and delivery are separate lines because they are separate facts that fail independently. Alertmanager can tell you it dispatched a notification, never that anything received it; this process taking the call says nothing about whether a human was reached. Reading only the first as if it were the second is how a pager stays silent for months behind a log where everything looks fine.

The ring is PROCESS-LOCAL and bounded to the last 200 lines. Both are the point: a record that outlived the process that took the call would be a claim about something nobody observed, and an unbounded log is a memory leak with a nice name. A restart empties it.

Request

GET /v1/o11y/alerts/last takes no parameters and no body — the credential is the whole request.

Response

The document declares no response body for this operation. It answers 200 on success and the platform error shape on failure — see Errors.

Examples

hanzo o11y alerts last
import { Configuration, O11yApi } from 'hanzoai';

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

resp, _, err := client.O11yAPI.GetO11yAlertsLast(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::get_o11y_alerts_last(&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).getO11yAlertsLast();
curl https://api.hanzo.ai/v1/o11y/alerts/last \
  -H "Authorization: Bearer $HANZO_API_KEY"

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?