Get targets

Returns one registered machine, with its live session load.

GET /v1/agent/targets/{id}

Addresshttps://api.hanzo.ai/v1/agent/targets/{id}
MethodGET
Operationget_agent_targets_by_id
AuthAuthorization: Bearer $HANZO_API_KEY

Returns one registered machine, with its live session load.

Request

1 field.

FieldInTypeRequiredDescription
idpathstringyesID is the target to act on, from the path.

Response

StatusBodyMeaning
200agent.targetViewok
defaultproblem-detailsrefused

200 body — 49 fields.

FieldInTypeAlwaysDescription
capacitybodystring—Capacity is a human summary of what the machine has ("8 vCPU / 32G", "1× GB10"), up to 256 characters.
createdAtbodystring—CreatedAt is when the machine was first registered, RFC 3339 in UTC.
hostbodystring—Host is the hostname sessions on this machine report, and it is a JOIN KEY, not a label: a session naming this host counts against the load below even when it names no target id, and a re-link of the same (org, host, owner) refreshes this row instead of creating a second.
idbodystring—ID is the machine's handle, minted as "tgt_" + 32 hex characters.
kindbodystring—Kind is what sort of destination this is, from a closed five: laptop | cloud | gpu | cluster | machine.
labelbodystring—Label is the name a person gave the machine ("workshop"), up to 128 characters.
metricsbodyagent.Metrics—
metrics.atbodyinteger (int64)—unix seconds, server-stamped
metrics.cpuTempbodynumber (double)—CPUTemp is the CPU package temperature in °C.
metrics.cpuUtilbodynumber (double)—CPUUtil is the busy fraction of all cores over the sample window, 0..1.
metrics.decodebodynumber (double)—Decode is generation throughput over the sample window, in tokens per second.
metrics.diskReadbodynumber (double)—DiskRead is the block-device read rate in bytes per second.
metrics.diskTotalbodyinteger (int64)—DiskTotal is the size of those filesystems, in bytes.
metrics.diskUsedbodyinteger (int64)—DiskUsed is the space used across local block filesystems, in bytes.
metrics.diskWritebodynumber (double)—DiskWrite is the block-device write rate in bytes per second.
metrics.gpuMemTotalbodyinteger (int64)—GPUMemTotal is dedicated VRAM in bytes; absent when the GPU shares system memory (unified).
metrics.gpuMemUsedbodyinteger (int64)—GPUMemUsed is the memory held by GPU processes, in bytes.
metrics.gpuPowerbodynumber (double)—GPUPower is the total GPU power draw in watts.
metrics.gpuPowerLimitbodynumber (double)—GPUPowerLimit is the total enforced GPU power limit in watts; absent when the driver reports none.
metrics.gpuTempbodynumber (double)—GPUTemp is the hottest GPU's temperature in °C.
metrics.gpuUtilbodynumber (double)—0..1 aggregate utilization
metrics.kvCachebodynumber (double)—KVCache is the KV-cache occupancy, 0..1.
metrics.load1bodynumber (double)—Load1 is the machine's own one-minute load average — a count of runnable and uninterruptible tasks, NOT a percentage and NOT already divided by core count, so it is read against Spec.CPUs: 8.0 is idle on 16 cores and swamped on 4.
metrics.load5bodynumber (double)—Load5 is the same figure averaged over five minutes.
metrics.load15bodynumber (double)—Load15 is the same figure over fifteen.
metrics.memFreebodyinteger (int64)—bytes
metrics.memUsedbodyinteger (int64)—bytes
metrics.modelbodystring—Model is the model id(s) served on this machine, comma-separated, at most 128 bytes.
metrics.netRxbodynumber (double)—NetRx is the receive rate of physical interfaces in bytes per second.
metrics.netTxbodynumber (double)—NetTx is the transmit rate of physical interfaces in bytes per second.
metrics.prefillbodynumber (double)—Prefill is prompt (prefill) throughput over the sample window, in tokens per second.
metrics.runningbodyinteger (int64)—Running is the number of requests being served now.
metrics.ttftbodynumber (double)—TTFT is the mean time to first token, in seconds, of requests that started in the window.
metrics.waitingbodyinteger (int64)—Waiting is the number of requests queued.
metricsAtbodystring—MetricsAt is when that heartbeat was recorded, RFC 3339 in UTC, and the SERVER stamps it — a client cannot backdate or forge the staleness clock.
runningbodyinteger (int64)—Running is how many of those are in running right now — the number a dispatcher weighs against Capacity.
servingbodyboolean—Serving says whether a run the caller sends here now would be taken: the machine is the caller's (or the caller is an org admin), and it is online with a runner that polled for work within the last 90 seconds — the online and runner half is what dispatch checks (TargetDispatchable).
sessionsbodyinteger (int64)—Sessions is how many of the org's sessions are mapped to this machine, by target id OR by matching Host.
specbodyagent.Spec—
spec.archbodystring—amd64 | arm64 | ...
spec.cpusbodyinteger (int64)—logical cores
spec.gpusbodyagent.GPU[]—GPUs is every accelerator the machine advertises, one entry each, capped at 32 on write.
spec.gpus[].memorybodyinteger (int64)—VRAM bytes, 0 = unknown
spec.gpus[].modelbodystring—"GB10", "8060S", "RTX 4090"
spec.gpus[].vendorbodystring—nvidia | amd | apple | intel | ...
spec.memorybodyinteger (int64)—total RAM, bytes
spec.osbodystring—linux | darwin | windows
statusbodystring—Status is the EFFECTIVE liveness — online | offline | draining — not the stored one.
updatedAtbodystring—UpdatedAt is the last write to the row, same format — which for a beating machine is its last heartbeat, since a heartbeat IS a write.

Failure carries the platform error shape — see Errors.

Examples

hanzo agent targets get <id>
import { Configuration, AgentApi } from 'hanzoai';

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

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

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

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

let result = agent_api::get_agent_targets_by_id(&cfg, Default::default()).await?;
import ai.hanzo.cloud.ApiClient;
import ai.hanzo.cloud.api.AgentApi;

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

var result = new AgentApi(client).getAgentTargetsById();
curl https://api.hanzo.ai/v1/agent/targets/<id> \
  -H "Authorization: Bearer $HANZO_API_KEY"

MCP reaches agent through the agent tool, which names its 38 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_agents"
         }
       }
     }'

Agent API · All Hanzo APIs · Interactive reference

Was this page useful?