Skip to main content

Models & Operations

List every model, model class, and operation with live reachability under your AI policy: provider, region, gating, and the exact constraint blocking each route.

Two read-only catalogs answer "what exists and what can we reach". GET /v1/ai/models returns every model and model class the platform knows, annotated per deployment with provider, region, and whether this workspace can reach it under the live policy; when it cannot, reason names the constraint that stopped it. GET /v1/ai/operations returns every operation type the platform runs, the class each resolves to for this workspace, whether the workspace overrode it, and whether it currently has a route.

The reason vocabulary is shared across both catalogs and the route explainer: allowed (reachable), model_denied (removed by denied_models), provider_floor (excluded by the platform deployment floor), provider_not_allowed (excluded by allowed_providers), and region_not_permitted (excluded by region_pin). Because each entry carries the specific constraint, an unreachable model is diagnosable in one read: the answer to "why can we not use this model" is in the row, not in a support ticket.

Classes carry a source: builtin (defined by the platform), platform (defined at deployment level), or org (overridden by this workspace). A class is reachable when its chain still contains at least one reachable step under the current constraints. Deployments with custom_endpoint: true are self-hosted or customer-operated inference endpoints; they participate in reachability like any other deployment, and no host or credential detail is returned for them, by design.

GET/v1/ai/models

Response fields

models[]arrayPer model: model, tier, capabilities, reachable, reason, and deployments[] each carrying provider, region, custom_endpoint, reachable, reason.
classes[]arrayPer class: name, description, source (builtin | platform | org), required_capabilities, fallback (chain | primary_only), chain[] with per-step reachability, and an overall reachable flag.
constraintsobjectThe enforced constraints the annotations were computed against, including platform_provider_floor.
countsobjecttotal models known and how many are reachable for this workspace.

Response: Model catalog (excerpt)

{
  "models": [
    {
      "model": "claude-sonnet",
      "tier": "default",
      "capabilities": ["generate", "tool_use"],
      "reachable": true,
      "reason": "allowed",
      "deployments": [
        { "provider": "bedrock", "region": "eu", "custom_endpoint": false, "reachable": true, "reason": "allowed" }
      ]
    }
  ],
  "classes": [
    {
      "name": "standard",
      "description": "General-purpose extraction lineage",
      "source": "builtin",
      "required_capabilities": [],
      "fallback": "chain",
      "chain": [
        { "model": "claude-sonnet", "reachable": true, "reason": "allowed" }
      ],
      "reachable": true
    }
  ],
  "constraints": {
    "region_pin": "eu",
    "allowed_providers": ["bedrock"],
    "denied_models": ["claude-opus"],
    "platform_provider_floor": ["bedrock"]
  },
  "counts": { "total": 18, "reachable": 9 }
}
GET/v1/ai/operations

Response fields

operations[].operation_typestringThe operation, for example extraction or document_ocr. Sorted alphabetically.
operations[].classstringThe model class this operation resolves to for this workspace.
operations[].sourcestringWhere the mapping came from: builtin, platform, or org.
operations[].overriddenbooleanTrue when the workspace remapped this operation (source is org).
operations[].gatingstringregistered (blocks policy activation when unroutable), advisory (warns only), or none (not swept; routable is null).
operations[].routableboolean | nullWhether a compliant route currently exists. Null for gating: none, since those operations are not probed.
operations[].reasonstringPresent only when routable is false: why no route exists, for example no_compliant_route.
countsobjecttotal, overridden, registered, advisory.

Response: Operation catalog (excerpt)

{
  "operations": [
    {
      "operation_type": "document_ocr",
      "class": "ocr",
      "source": "builtin",
      "overridden": false,
      "gating": "advisory",
      "routable": false,
      "reason": "no_compliant_route"
    },
    {
      "operation_type": "extraction",
      "class": "standard",
      "source": "builtin",
      "overridden": false,
      "gating": "registered",
      "routable": true
    }
  ],
  "counts": { "total": 60, "overridden": 1, "registered": 8, "advisory": 1 }
}
The gating field explains the satisfiability gate's behaviour operation by operation. A registered operation losing its route blocks activation; an advisory one only produces a warning in advisory_warnings; a none operation is not swept at all, so its routable is null rather than a claim about a check that never ran.

Read these two catalogs together when designing a policy change. The operations list shows which operations are registered and would therefore block an activation; the models list shows which candidates each constraint removes. A planned constraint that turns every chain step of a registered operation's class unreachable is exactly the change the satisfiability gate will refuse.