---
title: "Update Model"
method: PATCH
path: "/v1/models/{model_id}"
tags: ["models"]
---

# Update Model

`PATCH /v1/models/{model_id}`

Set or rename a model's ``name`` (unique per org).

The console drives this; both naming an unnamed model and renaming an
existing one are the same call. A name already taken in the org surfaces as
409 (the partial unique index is the guard); the request body's validator
rejects malformed names with 422 before reaching here.

Owner-scoped, matching ``delete``: a member can read the org's models but
only rename their own (a non-owned model returns 404).

## Path parameters

- `model_id` string, uuid, required

## Request body

- UpdateModelRequest — ``PATCH /v1/models/{model_id}`` — set or rename a model's name. Names are unique per org; a clash is reported as ``409``. Whitespace is normalized so a name round-trips through lookup.
  - `name` string, required — New human-readable model name, unique per org.

## Response `200`

Successful Response

- ModelResponse
  - `id` union, required
    - string, uuid
    - string
  - `short_id` string, required — Short, human-friendly model handle, e.g. ``mdl-7bQ2xV9mKp4R``.
  - `name` string, required — Human-readable model name, unique per org. Server-generated at creation; editable via ``PATCH /v1/models/{model_id}``.
  - `user_id` string, required — Id of the user who created the model (the creator/owner).
  - `model_type` 'training' | 'custom_training' | 'reasoning' | 'sequence_reasoning', required — ``training`` for platform-trained models; ``custom_training`` for caller-owned Python trial artifacts; ``reasoning`` for reasoning models on flat tasks; ``sequence_reasoning`` for reasoning models on sequence tasks.
  - `created_at` string, nullable
  - `hyperparameters` object, nullable — The winning trial's hyperparameters (model-family specific).
  - `validation_metrics` object, nullable — Cross-validation scores the optimizer selected on, keyed by metric name (e.g. ``{"auc": 0.91}``).
  - `source_tables` string[] — Names of the source tables the model trained on, captured at finalize from its training plan (read relations). Empty for models recorded before this was captured.

## Other responses

- `422` — Validation Error

---

[API](https://skmtc.net/outerproduct/apis/outerproduct-api.md) · [All operations](https://skmtc.net/outerproduct/apis/outerproduct-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/outerproduct/outerproduct-api/revisions/6c6e81fb3282/schema)
