Command Reference
Endpoints
List, inspect, and update endpoints and their routing, and see how they changed over time.
An endpoint is the public model identifier callers use. One or more deployments serve it. The endpoint owns the model, the serverless pricing, the request-routing settings, the aliases, and the allowlist of extra teams, so these change on the endpoint and apply to every deployment serving it. A deployment's endpointId (from inf deployment get) names its endpoint.
Alias: inf endpoints
inf endpoint get
Get an endpoint's settings and allowed teams.
inf endpoint get --id <endpoint-id>inf endpoint update
Update an endpoint's settings. Omitted flags leave a setting unchanged; pass null to restore a nullable setting's inherited default.
# Switch the model every deployment on the endpoint serves
inf endpoint update --id <endpoint-id> --model-id <model-id>Changing the model rolls every deployment on the endpoint. It resets each deployment's model-config pin, parallelism, and shard overrides.
| Flag | Description |
|---|---|
--id <id> | Endpoint to update (required) |
--team-id <id> | Team that owns the endpoint (defaults to the active team) |
--model-id <id> | Model every deployment on the endpoint serves |
inf endpoint list
List the team's endpoints. Each row shows the endpoint's deployments with their rank and rule, the default deployment, and how many deployments are running. The list is built from deployments, so an endpoint whose deployments are all archived does not appear.
inf endpoint list
inf endpoint list --project <project-id> --stopped| Flag | Description |
|---|---|
--team <id> | Team ID (defaults to the active team) |
--project <id> | Only endpoints in this project |
--stopped | Include endpoints whose deployments are all stopped |
--model <text> | Only endpoints whose model identifier or name contains this text (case-insensitive) |
inf endpoint describe
Show the endpoint's settings and resolved list price, its routingVersion, then every deployment in routing order (p<priority>, * marks the default). Each deployment row shows its rule as CEL, engine and config version, flag overrides, GPUs, instance counts, and live routing load.
inf endpoint describe <endpoint-id>
inf --json endpoint describe <endpoint-id> | jq '.deployments[] | {priority, name, ruleText}'
inf endpoint describe <endpoint-id> --status Active,Degraded| Flag | Description |
|---|---|
--team <id> | Team ID (defaults to the active team) |
--status <statuses> | Only deployments in these statuses: Pending, Active, Degraded, Updating, Stopped, Unschedulable |
inf endpoint instances
Show every deployment on the endpoint and its instances, grouped by the exact engine config frozen onto each instance when it was created. For each group the command shows:
- the config id and version, engine, parallelism, and L3 KV backend
- the launch command the worker builds, with flags in the order the worker passes them. Values that only the pod knows (the weights snapshot path, the served model name, the Mooncake client config) are
<placeholders>marked# worker. - the env vars (secrets masked)
- each instance's ID, status,
configHash, and whether it is on the deployment's desired config
The last section diffs each deployment's desired config, and each instance group, against the default deployment's desired config: flags and env added, removed, or changed. By default the command skips Stopped deployments and shows only live instances. Archived deployments never appear.
inf endpoint instances <endpoint-id>
inf endpoint instances <endpoint-id> --stopped --terminated
inf --json endpoint instances <endpoint-id> | jq '.diffs[] | select(.identical | not)'| Flag | Description |
|---|---|
--team <id> | Team ID (defaults to the active team) |
--stopped | Include Stopped deployments |
--terminated | Include terminated instances |
--instance-status <statuses> | Only instances in these statuses |
--max-instances <n> | Read the frozen config of at most this many newest instances per deployment (default 200) |
inf endpoint history
Show how the endpoint and all its current deployments changed:
routingEras: every deployment's priority and rule over time. Each era names who started it (startedBy: user,clientTag,reason,routingVersion) and the deployments it changed (changes: priority and rule before and after).configEras: each deployment's config hash over time.timeline: one list of endpoint and deployment events.
--at shows the endpoint and every deployment as they were at that moment. It takes --team, --since, --until, --at, --type, --actor, and --max-events, with the same meanings as in inf deployment history. For --instance, --instance-configs, or --no-endpoint-events, run inf deployment history on one deployment.
inf endpoint history <endpoint-id> --since 3d
inf --json endpoint history <endpoint-id> --at 2026-10-01T14:05:00Z | jq '.stateAt'inf endpoint pricing
Show the endpoint's list price: what billing charges for the endpoint.
inf endpoint pricing <endpoint-id>Alias: inf endpoint prices
| Flag | Description |
|---|---|
--team <id> | Team ID (defaults to the active team) |
inf endpoint events
Read one page of the endpoint's raw events, newest first:
endpoint.changedrecords{ changed, before, after }for settings and list price.endpoint.routing_changedrecords every deployment's{ deploymentId, rank, rule }before and after (rankis the priority), plusoperation(replace,set,clear),fromVersion/toVersion,reason,clientTagandapiKeyId. Events from before 2026-10-07 have onlybeforeandafter.endpoint.alias_updatedrecords{ alias, priceMultiplierBps, adsEnabled }: the alias's settings after an update.- The other event types are
endpoint.created,endpoint.deployment_added,endpoint.alias_added, andendpoint.alias_removed.
The same read is available as REST POST /endpoints/{endpointId}/events and the MCP tool deployment_get_endpoint_events.
inf endpoint events --endpoint-id <endpoint-id> --event-type endpoint.routing_changed --since 2026-10-01T00:00:00Z| Flag | Description |
|---|---|
--endpoint-id <id> | The endpoint (required) |
--event-type <type> / --actor-type <type> | Exact-match filters |
--since <time> / --until <time> | Bound createdAt: since is inclusive, until exclusive |
--page-size <n> | 1–100, default 50 |
--cursor <json> | nextCursor from the previous page. Reset it when you change a filter |
Routing: priorities, versions, and safe concurrent edits
Each deployment on an endpoint has a routing priority (routingRank on deployment reads) and an optional rule.
- Priority: an integer; lower wins. Priorities are unique within an endpoint. The engine evaluates deployments in priority order. The default is the deployment with the lowest priority.
null= no priority; when every deployment has none, the routing is off. - Gaps: a full-list save assigns
10, 20, 30, …, so you can move one deployment between two others (e.g.15) without renumbering. Endpoints saved before gaps existed keep1, 2, 3, …until their next full-list save. routingVersion:inf endpoint describeandinf endpoint getshow it. Every write names the version it read. If the routing changed since, the write fails withCONFLICT, saves nothing, and the error shows the current routing and version. Re-read, re-apply your change, retry.- Audit: every write records who made it, the version before and after, and your optional
--reasonand--client-tag(script name, agent session) on theendpoint.routing_changedevent.inf endpoint historyshows the per-deployment diff.
inf endpoint routing set
Changes one deployment's rule and/or priority. Every other deployment keeps its own, so two people editing different deployments never overwrite each other.
inf endpoint routing set <endpoint-id> --deployment <dpl> \
--rule 'request.input_token_count + request.num_images * 2000 > 150000' \
--reason 'long-prompt pool' --client-tag 'agent kimi-canary'
inf endpoint routing set <endpoint-id> --deployment <dpl> --priority 15
inf endpoint routing set <endpoint-id> --deployment <dpl> --rule false # park it
inf endpoint routing set <endpoint-id> --deployment <dpl> --rule any # no rule| Flag | Description |
|---|---|
--deployment <id> | The deployment to change (required) |
--rule <cel> | The new rule as CEL; false parks the deployment; any removes the rule. Omit to keep the rule |
--priority <n> | The new priority (lower wins). Omit to keep it. Taking a priority another deployment holds is refused. A deployment with no priority that gets none is placed 10 after the last |
--expect-version <v> | Refuse the write unless the routing is still at this routingVersion (from the read you decided on). Default: the version read just before writing |
--reason <text> / --client-tag <tag> | Recorded on the routing event. --client-tag defaults to inf-cli/<version> |
How routing rules work
- A deployment is eligible when its rule is
true. Anullrule is always eligible. A rule isfalsewhen it divides or takes a modulo by zero, or reads a variable the engine can't see for that request (see below). A deployment with no running instances is never eligible. - The request may use every eligible deployment and takes any free capacity among them, whatever their priority. When all of them are full, it queues (or gets a
429); it never uses an ineligible deployment. - When no deployment is eligible, the default (lowest priority) serves it, whatever its rule says.
- Engines reload routing at most every 5 minutes, so a save takes effect within 5 minutes. An endpoint whose routing was never saved spreads requests across its deployments by free capacity.
Rule variables:
| Variable | Type | Value | Unknown when |
|---|---|---|---|
request.input_token_count | number | Prompt tokens, counted with the endpoint's tokenizer | Presigned request |
request.max_output_tokens | number | max_completion_tokens, else max_tokens, else max_output_tokens; 0 when the request sets none (the engine sizes the output to the context left) | Presigned request, or only non-integer values set |
request.num_images | number | Image parts across the messages or input | Presigned request |
request.stream | boolean | The request streams | Presigned request |
request.has_tools | boolean | The request lists at least one tool | Presigned request |
request.us_geo_required | boolean | Sent to a US-only API hostname | Never |
request.is_openrouter | boolean | The request came from OpenRouter | Never |
request.prefix_family | string | Client family: 12 uppercase hex characters hashed from the tools and first 4 messages; "" with fewer than 4 messages, or for presigned and Responses-API requests. CEL: == "B58F1D182419" or in ["…", "…"] | Never |
request.tools_family | string | Tool-set family: 12 uppercase hex characters hashed from the tool definitions alone, the same across a client's conversations; "" with no tools, or for presigned requests. CEL: == "1DE7BDB78E18" or in ["…", "…"] | Never |
Requests above the size limit for inline bodies reach the engine as a presigned URL, so any rule that reads a body-derived variable is false for them and they fall back to the default.
Related commands
inf deployment updatechanges one deployment's own settings: name, GPUs, instances, engine overrides.