---
title: "Edit a MANAGED backend's knobs (platform admin)"
method: PATCH
path: "/v1/admin/inference/catalog/{modelId}/backends/{backendEndpoint}"
tags: ["Internal"]
---

# Edit a MANAGED backend's knobs (platform admin)

`PATCH /v1/admin/inference/catalog/{modelId}/backends/{backendEndpoint}`

Weight, health kill switch, concurrency cap, and prompt-byte lane on one managed backend. Identity fields (provider, endpoint) and self-hosted pool:// backends are refused here: pool state belongs to the serving deployments that own it (their /weight and /health endpoints).

## Path parameters

- `modelId` string, required
- `backendEndpoint` string, required

## Request body

- PatchInferenceCatalogBackendRequest
  - `healthy` boolean
  - `maxConcurrency` integer
  - `maxPromptBytes` integer
  - `minPromptBytes` integer
  - `reason` string — Audit note, required when flipping the kill switch
  - `weight` integer

## Response `200`

Applied

- InferenceCatalogModel — The endpoint-level routing view of one catalog model.
  - `backends` InferenceCatalogBackend[], required
    - `accelerator` string — Hardware class tag, when known
    - `endpoint` string, required — pool://<poolId> for self-hosted capacity; an external URL for managed providers
    - `healthy` boolean, required — false = excluded from routing entirely (the kill switch)
    - `maxConcurrency` integer — Per-backend in-flight cap; 0 = model default
    - `maxPromptBytes` integer
    - `minPromptBytes` integer
    - `nativeFamilies` string[]
    - `pools` object[] — Self-hosted only: the deployments registering into this pool
      - `deploymentId` string
      - `nodePool` string
      - `status` string
      - `version` string
    - `provider` string, required — selfhosted|bedrock|openrouter|openai|anthropic (openrelay pools report selfhosted)
    - `ref` string, required — Provider-side model id / deployment id
    - `standby` boolean — true = held out of even the overflow tail (an unramped rollout green)
    - `transport` string — direct|tunnel|privatelink
    - `version` string — Low-cardinality rollout tag, when set
    - `weight` integer, required — Live routing weight (0 = overflow tail)
  - `enabled` boolean
  - `modelId` string, required
  - `routing` object
    - `families` object
    - `maxAttempts` integer
    - `strategy` string — first_healthy|weighted|sticky (empty = gateway default)
  - `status` string
  - `updatedAt` string

## Other responses

- `400` — The request is invalid
- `401` — Missing or invalid API key
- `403` — API key lacks the required scope
- `404` — Resource not found
- `409` — The request conflicts with existing state
- `503` — A required integration (e.g. payments) is not configured

## Changes

- **2026-08-26** `9dad68d3afa1` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/openrelay/apis/openrelay-api/changes/v1/admin/inference/catalog/:modelId/backends/:backendEndpoint/patch.md)

---

[API](https://skmtc.dev/openrelay/apis/openrelay-api.md) · [All operations](https://skmtc.dev/openrelay/apis/openrelay-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/openrelay/openrelay-api/revisions/3dc47c9667e8/schema)
