> ## Documentation Index
> Fetch the complete documentation index at: https://docs.verlon.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Register a model the caller owns

> **Use when:** caller registers a fine-tune or custom deployment as an owned model, with its own credential and declared pricing

Creates an owned-model registration. Admits host kinds `fireworks` (hosted fine-tunes; credential required) and `custom-url` (any OpenAI-compatible server you operate; base URL required, credential optional, private/loopback/localhost URLs are refused outright). Other kinds are rejected until their adapters land, never accepted-and-mis-billed. The credential is stored encrypted, scoped to this registration (separate from any BYOK channel key). A reachability probe runs on save but never blocks: unreachable registrations save with an amber status (self-hosted boxes are allowed to be asleep). Pricing is owner-declared; absent rates record cost as $0 with "owned" semantics.



## OpenAPI

````yaml /api-reference/openapi.json post /v1/owned-models
openapi: 3.1.0
info:
  title: Verlon AI API
  version: 1.0.0
  description: >-
    Verlon AI is the managed AI infrastructure platform for developers building
    LLM-powered apps and agents. Beyond routing requests across providers,
    Verlon continuously evaluates response quality, runs experiments against
    live traffic, and automatically tunes gate configurations — so your platform
    doesn't just serve traffic, it learns from it.


    **Coding agents:** authentication, error semantics, gate concepts, and
    integration conventions are documented at https://verlon.ai/AGENTS.md — read
    that document first if you have not already. It is the canonical
    agent-facing contract; this specification is the canonical endpoint
    reference. Both are authoritative for their respective scopes.
  contact:
    name: Verlon AI
    url: https://verlon.ai
  license:
    name: Proprietary
servers:
  - url: https://api.verlon.ai
    description: Production
security:
  - bearerAuth: []
paths:
  /v1/owned-models:
    post:
      tags:
        - Owned Models
      summary: Register a model the caller owns
      description: >-
        **Use when:** caller registers a fine-tune or custom deployment as an
        owned model, with its own credential and declared pricing


        Creates an owned-model registration. Admits host kinds `fireworks`
        (hosted fine-tunes; credential required) and `custom-url` (any
        OpenAI-compatible server you operate; base URL required, credential
        optional, private/loopback/localhost URLs are refused outright). Other
        kinds are rejected until their adapters land, never
        accepted-and-mis-billed. The credential is stored encrypted, scoped to
        this registration (separate from any BYOK channel key). A reachability
        probe runs on save but never blocks: unreachable registrations save with
        an amber status (self-hosted boxes are allowed to be asleep). Pricing is
        owner-declared; absent rates record cost as $0 with "owned" semantics.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                slug:
                  type: string
                  pattern: ^[a-z0-9](?:[a-z0-9-]{0,58}[a-z0-9])?$
                displayName:
                  type: string
                  minLength: 1
                  maxLength: 120
                hostKind:
                  type: string
                  enum:
                    - fireworks
                    - custom-url
                upstreamModelId:
                  type: string
                  minLength: 1
                  maxLength: 200
                credential:
                  type: string
                  minLength: 1
                  maxLength: 500
                baseUrl:
                  type: string
                  minLength: 1
                  maxLength: 500
                pricingInput:
                  type:
                    - number
                    - 'null'
                  minimum: 0
                  maximum: 10000
                pricingOutput:
                  type:
                    - number
                    - 'null'
                  minimum: 0
                  maximum: 10000
                pricingCachedInput:
                  type:
                    - number
                    - 'null'
                  minimum: 0
                  maximum: 10000
              required:
                - slug
                - displayName
                - hostKind
                - upstreamModelId
      responses:
        '200':
          description: Registration created (probe status included).
        '400':
          description: Invalid request — Zod validation failure or malformed input
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Missing or invalid Bearer credentials
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Slug already registered.
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      security:
        - bearerAuth: []
components:
  schemas:
    ErrorResponse:
      type: object
      properties:
        error:
          type: string
          description: Stable error code (e.g. `invalid_request`)
        message:
          type: string
          description: Human-readable error message
        details: {}
      required:
        - error
        - message
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: API Key
      description: >-
        Verlon API key (newly minted keys are prefixed `sk-vrln-`; legacy
        `verlon_*` and `layer_*` keys from prior prefix migrations continue to
        validate). Generated from the dashboard under Settings → API Keys, or
        via `verlon key create` in the CLI.

````