AI Objectives
Declared "keep this true" goals for your account. You state an objective — for example, keep p95 latency under 300 ms on an endpoint, or keep the error rate under 1% — and a reconciler evaluates it on a rolling window. When an objective is breached it either records the breach (observe), raises an Iris nudge that pre-seeds the assistant to diagnose and fix it (nudge), or — once autonomy is enabled for an actionable type — applies a dry-run-clean fix automatically (auto). Recovered objectives clear themselves.
Objectives are distinct from SLO targets (which drive the SLI display): objectives are multi-type, can be scoped to a single endpoint, and are actionable.
Account scope + permissions: objectives belong to your active account and require the traffic-inspector permission (read to list, write to change). Endpoint-scoped latency/error objectives need traffic capture enabled on that endpoint, otherwise they read back as insufficient data and never false-breach.
Objective types
auto not allowed.List Objectives
Returns the account's declared objectives under an objectives array, ordered by objective_type. The list is not paginated.
Response (200 OK)
[] when none are declared./v1/account/objectives/{uuid}.account or endpoint.user (this API or the dashboard) or iris (the AI assistant).ok | breach | insufficient_data | unknown (not evaluated yet).Create an Objective
Declares a new objective. The tuple (type, scope, endpoint) is unique per account — a duplicate returns 409.
Request body
account (default) or endpoint.uuid. Required when scope=endpoint; must be an endpoint of the active account.lt | lte | gt | gte (e.g. keep latency lt 300).300 (ms), 1.0 (%), 7 (days).ms | pct | days | score.3600.50.observe | nudge | auto. auto is rejected for diagnose-only types and requires the ai_autonomy entitlement.Deprecated: endpoint_id (integer) is still accepted until the sunset. Send endpoint_uuid; sending both for different objects is a 400 id_uuid_mismatch.
Response (201 Created): the objective as stored, read back after the write, in the list-entry shape above: its uuid, source (user), created_by_uuid, its evaluation state (last_state is unknown until the first evaluation) and created_at / updated_at.
The objective carries uuid, account_uuid, endpoint_uuid (endpoint scope) and created_by_uuid. Deprecated: until the sunset it also carries the legacy integer id and *_id fields. Don't use them.
Update / Delete an Objective
PUT tunes an objective's parameters (its type, scope and endpoint are immutable — they form the unique target) and answers 200 with the objective as stored, in the list-entry shape (its source, created_by_uuid, evaluation state and timestamps included). DELETE removes it. Both return 404 for an unknown UUID.
Errors
auto on a diagnose-only type, a missing endpoint_uuid for an endpoint scope, an endpoint_uuid that is not a uuid, or endpoint_id and endpoint_uuid naming different endpoints (id_uuid_mismatch).auto without the ai_autonomy entitlement.404 unknown objective (PUT/DELETE), or an endpoint_uuid that is not an endpoint of the active account; 409 an objective already exists for that (type, scope, endpoint).