---
title: "Creates a runtime LLM (admin)."
method: POST
path: "/llm-registry/admin/runtime-models"
tags: ["LLM Registry"]
---

# Creates a runtime LLM (admin).

`POST /llm-registry/admin/runtime-models`

## Request

- Base URL: `https://h2ogpte.genai.h2o.ai/api/v1`
- URL: `https://h2ogpte.genai.h2o.ai/api/v1/llm-registry/admin/runtime-models`
- Auth: HTTP bearer
- TypeScript: <https://skmtc.dev/h2o/apis/h2ogpte-rest-api/docs/llm-registry/admin/runtime-models/post.ts> (a function with typed inputs; its response is checked against the schema)

Creates a UI/API runtime LLM. The request body is the model configuration (display_name, base_model, inference_server, and any LiteLLM/provider fields) and is stored verbatim. The connection is probed before the model is saved; a failed probe rejects the create. With skip_test=true, the configuration is saved as not_probed and is unavailable for inference until a test of the saved model succeeds. Skipping does not bypass structural validation. A skipped configuration waits for a manual test while it is still not_probed, including after a restart. A FAILED manual test records probe_failed, which does put the configuration back into the startup re-probe population: once its endpoint recovers, a restart promotes it to ok and grants it by the default rules with no further admin action. display_name must be the name the model is served under whenever that name is a LiteLLM proxy routing key: the lite_llm_yaml block's top-level model_name when the config has a block, else base_model when inference_server is "litellm". A different display_name is rejected (400), because the model is registered with the proxy under that name. A model reached directly at its provider (inference_server anthropic, google, a vLLM endpoint, ...) with no block is registered under display_name itself, so its display_name is free. A block mux cannot read (hand-written YAML, or JSON declaring no top-level model_name, including model_list) is rejected. Admin only.

## Query parameters

- `skip_test` boolean

## Request body

- object

## Response `201`

Successful operation

- object

## Other responses

- `400`: Bad request
- `401`: Unauthorized - Invalid or missing API key
- `403`: Forbidden
- `409`: Conflict
- `default`: Unexpected error

---

[API](https://skmtc.dev/h2o/apis/h2ogpte-rest-api.md) - [All operations](https://skmtc.dev/h2o/apis/h2ogpte-rest-api/llms.txt) - [OpenAPI document](https://skmtc.dev/h2o/apis/h2ogpte-rest-api/revisions/a82a117320f4?raw)
