List features

The feature catalogue in its two honest lenses.

GET /v1/risk/features

Addresshttps://api.hanzo.ai/v1/risk/features
MethodGET
OperationriskFeatures
AuthAuthorization: Bearer $HANZO_API_KEY

The feature catalogue in its two honest lenses.

The MODEL lens is the governed inventory: one entry per dimension of the model space, each carrying the typology it serves, the supervisor's own words for the indicator, and the published standard those words come from — so a coverage claim is checkable rather than asserted. It is the same for every organisation.

The SURFACE lens is what THIS organisation's own event surface actually carries, measured over the window: how many of its buckets carry each dimension at all, and what the dimension reads where it is present. A dimension present in no bucket is BLIND, and saying so is the difference between no risk and no data.

Request

1 field.

FieldInTypeRequiredDescription
daysqueryinteger—Days is how far back to measure the organisation's own coverage, 1 to 400.

Response

StatusBodyMeaning
200risk.riskCatalogok
defaultproblem-detailsrefused

200 body — 30 fields.

FieldInTypeAlwaysDescription
gapbodystring—Gap says why a lens could not be measured, when that is the case.
modelbodyrisk.riskModelFeature[]—Model is the governed inventory: one entry per dimension of the model space, each carrying the typology it serves and the published standard that asks for it.
model[].blindbodyinteger (int64)—Blind is how often this dimension took that neutral value for THIS organisation.
model[].citationbodystring—Citation is where those words come from, so the claim is checkable rather than asserted.
model[].indicatorbodystring—Indicator is the supervisor's own words for the thing being looked for.
model[].namebodystring—Name is the dimension.
model[].neutralbodynumber (double)—Neutral is the value the coordinate takes when the data cannot support it.
model[].severitybodystring—Severity is how much weight an alert on it carries.
model[].typologybodystring—Typology is the pattern this dimension detects.
model[].unitbodystring—Unit is how to read the raw number, which is what turns a coordinate into a sentence an investigator can put in a file.
model[].windowbodystring—Window is the sliding aggregate it reads.
networkbodyrisk.riskBand[]—Network is the published cross-organisation baseline over the same window, so the surface above has something to be read AGAINST.
network[].daybodystring (date-time)—Day is the day the band covers.
network[].dimbodystring—Dim is the dimension, named as this API publishes it.
network[].kindbodystring—Kind is the subject kind it was computed over.
network[].nbodyinteger (uint64)—N is how many subject-days went into it.
network[].orgsbodyinteger (uint32)—Orgs is how many organisations contributed, each weighted exactly one vote whatever its size.
network[].q10bodynumber (double)—Q10 is the quiet end of the network's day: a tenth of contributing organisations sit at or below it.
network[].q50bodynumber (double)—Q50 is the network's median day.
network[].q90bodynumber (double)—Q90 is the busy end: a tenth of contributing organisations sit at or above it.
surfacebodyrisk.riskOrgFeature[]—Surface is what this organisation's own event surface carries, per dimension, measured over the window.
surface[].blindbodyboolean—Blind is true when the dimension is present in no bucket at all: this organisation's surface does not carry it, and saying so is the difference between no risk and no data.
surface[].bucketsbodyinteger (int64)—Buckets is how many five-minute buckets of this organisation's surface were measured.
surface[].maxbodynumber (double)—Max is the largest value it reached in the window.
surface[].meanbodynumber (double)—Mean is the dimension's average where it was present.
surface[].namebodystring—Name is the dimension as this API publishes it.
surface[].presentbodyinteger (int64)—Present is in how many of them the dimension carried a value at all.
surface[].sourcebodystring—Source names the plane it is rolled up from, so a dimension that reads zero everywhere traces to a plane the organisation does not use rather than to a defect.
surface[].unitbodystring—Unit is how to read the numbers below.
tenantbodystring—Tenant is whose surface was measured.

Failure carries the platform error shape — see Errors.

Examples

hanzo risk features
import { Configuration, RiskApi } from 'hanzoai';

const api = new RiskApi(new Configuration({ accessToken: process.env.HANZO_API_KEY }));
const { data } = await api.riskFeatures();
from hanzoai.cloud import ApiClient, Configuration
from hanzoai.cloud.api import RiskApi

client = ApiClient(Configuration(access_token=os.environ["HANZO_API_KEY"]))
result = RiskApi(client).risk_features()
cfg := hanzoai.NewConfiguration()
cfg.AddDefaultHeader("Authorization", "Bearer "+os.Getenv("HANZO_API_KEY"))
client := hanzoai.NewAPIClient(cfg)

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

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

let result = risk_api::risk_features(&cfg, Default::default()).await?;
import ai.hanzo.cloud.ApiClient;
import ai.hanzo.cloud.api.RiskApi;

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

var result = new RiskApi(client).riskFeatures();
curl https://api.hanzo.ai/v1/risk/features \
  -H "Authorization: Bearer $HANZO_API_KEY"

Tool risk, op riskFeatures — 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": "risk",
         "arguments": {
           "op": "riskFeatures",
           "input": {}
         }
       }
     }'

Risk API · All Hanzo APIs · Interactive reference

Was this page useful?