---
title: "Register Custom Model"
method: POST
path: "/models/custom"
tags: ["models"]
---

# Register Custom Model

`POST /models/custom`

Register a custom language model with the organization that owns the API key.

The model configuration is validated by making a test API call before saving.

## Request body

- RegisterCustomModelRequest
  - `name` string, required — The name of the custom language model
  - `identifier` string, required — The identifier of the custom language model (e.g. openai/gpt-4o, azure/gpt-5)
  - `provider` string, nullable — Provider name (auto-detected from identifier if not specified)
  - `type` string, nullable — Model type: 'llm' (default), 'embedding', or 'image'
  - `extra` object — Provider-specific configuration (e.g. api_base, api_version, region)
  - `api_key` string, nullable — The API key or credentials for the model

## Response `200`

Successful Response

- RegisterCustomModelResponse
  - `id` string, uuid, required — The ID of the custom language model
  - `name` string, required — The name of the custom language model
  - `identifier` string, required — The identifier of the custom language model
  - `provider` string, nullable — Provider name
  - `type` string, nullable — Model type: llm, embedding, or image
  - `extra` object — Provider-specific configuration

## Other responses

- `400` — Bad Request
- `401` — Unauthorized
- `402` — Payment Required (out of credits)
- `404` — Not Found
- `409` — Conflict
- `422` — Request Validation Error

---

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