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

# List chat, embedding, and video models

> Returns the catalog of chat, embedding, and video models available to your team. Shape mirrors OpenAI's `GET /v1/models` envelope (`{ object: "list", data: [...] }`) so SDK clients that already speak OpenAI drop in unchanged. Platform-specific fields (capability tags, lifecycle pointers) live under `aurous_metadata` on each entry. Per-model pricing lives on top-level `chat_pricing` (chat models), `embedding_pricing` (embedding models), or `video_pricing` (video models) — the unused siblings are null. Video rates are a matrix in credits per million VIDEO tokens, keyed by output resolution and whether the request includes video input; listed video rates use standard (non-team) pricing. Customers can compute credits-per-1K by dividing the published `credits_per_M` value by 1000. When the catalog is empty the response is `200` with `data: []` — never `404`. No query, path, or body parameters are accepted. 

Image and video rates are frozen per `Aurous-Version`: customers pinned to an older version see the rate card that was current when their version shipped, so price changes are never silently retroactive. Chat and embedding rates are NOT frozen per `Aurous-Version` — they track the most recently published rate version for each model, because LLM provider economics shift on weekly cadence. The receipt echoed on every chat / embedding response carries the exact rate that applied at dispatch time, so audit trails remain stable.



## OpenAPI

````yaml /api-reference/openapi.json get /v1/models
openapi: 3.0.0
info:
  title: Aurous Labs API
  description: >-
    Generate AI images with custom LoRA styles.


    ## Authentication

    All requests require an API key passed in the `X-Api-Key` header.

    Create API keys in your
    [dashboard](https://app.aurous-labs.com/dashboard/api-keys).


    ## Closed-beta access gate

    API keys are scoped to a user. If that user's account is not approved for
    the closed beta, every request returns `403` with one of these `error.code`
    values:


    - `account_pending` — awaiting review

    - `account_rejected` — declined post-signup

    - `account_suspended` — was approved, then suspended


    There is no retry — contact support to be approved. The same codes are
    emitted by the WebSocket gateway via 4001 close.


    ## Common headers

    Every response carries `Aurous-Request-Id` (a server-minted `req_<ULID>` for
    support tracing) and `Aurous-Version` (the API version applied to the
    response). Optionally pin a version on the request with `Aurous-Version:
    YYYY-MM-DD` — defaults to your team's pinned version.


    ## Quick Start

    ```bash

    curl -X POST https://api.aurous-labs.com/v1/images \
      -H "X-Api-Key: al_live_your_key" \
      -H "Content-Type: application/json" \
      -d '{"prompt": "A golden sunset over mountains", "lora_id": "your-lora-id", "size": "2k_1_1"}'
    ```
  version: 1.0.0
  contact: {}
servers:
  - url: https://api.aurous-labs.com
    description: Production
  - url: https://api.preprod.aurous-labs.com
    description: Preprod (staging)
security: []
tags:
  - name: Seedance (raw)
    description: >-
      Drop-in raw passthrough for Seedance video generation. Point the official
      Seedance provider SDK at this API's base URL and authenticate with your
      Aurous API key in the `X-Api-Key` header — request bodies are forwarded to
      the provider verbatim and responses come back shape-identical, so you keep
      the provider's exact request/response shapes. Task ids are Aurous-native
      `vid_…` ids. Billing rides response headers, not the body:
      `Aurous-Credits-Held` on the create response and `Aurous-Credits-Charged`
      on a settled, succeeded task read — the body itself stays provider-shaped.
paths:
  /v1/models:
    get:
      tags:
        - Models
      summary: List chat, embedding, and video models
      description: >-
        Returns the catalog of chat, embedding, and video models available to
        your team. Shape mirrors OpenAI's `GET /v1/models` envelope (`{ object:
        "list", data: [...] }`) so SDK clients that already speak OpenAI drop in
        unchanged. Platform-specific fields (capability tags, lifecycle
        pointers) live under `aurous_metadata` on each entry. Per-model pricing
        lives on top-level `chat_pricing` (chat models), `embedding_pricing`
        (embedding models), or `video_pricing` (video models) — the unused
        siblings are null. Video rates are a matrix in credits per million VIDEO
        tokens, keyed by output resolution and whether the request includes
        video input; listed video rates use standard (non-team) pricing.
        Customers can compute credits-per-1K by dividing the published
        `credits_per_M` value by 1000. When the catalog is empty the response is
        `200` with `data: []` — never `404`. No query, path, or body parameters
        are accepted. 


        Image and video rates are frozen per `Aurous-Version`: customers pinned
        to an older version see the rate card that was current when their
        version shipped, so price changes are never silently retroactive. Chat
        and embedding rates are NOT frozen per `Aurous-Version` — they track the
        most recently published rate version for each model, because LLM
        provider economics shift on weekly cadence. The receipt echoed on every
        chat / embedding response carries the exact rate that applied at
        dispatch time, so audit trails remain stable.
      operationId: V1ModelsController_list
      parameters:
        - name: Aurous-Version
          in: header
          required: false
          description: >-
            Optional API version pin (YYYY-MM-DD). Defaults to your team's
            pinned version, or the system default `2026-07-16` for
            unauthenticated requests.
          schema:
            type: string
            example: '2026-07-16'
            pattern: ^\d{4}-\d{2}-\d{2}$
      responses:
        '200':
          description: List of available chat, embedding, and video models.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ModelsListResponse'
          headers:
            Aurous-Request-Id:
              description: Server-minted request id. Quote this in support tickets.
              schema:
                type: string
                example: req_01HXMQ7Z3K8Y2NABCDEFGHJKMP
            Aurous-Version:
              description: API version pin applied to this response (YYYY-MM-DD).
              schema:
                type: string
                example: '2026-07-16'
            X-RateLimit-Limit:
              description: Bucket capacity (max tokens) for this endpoint class.
              schema:
                type: integer
                example: 120
            X-RateLimit-Remaining:
              description: Tokens remaining after this request.
              schema:
                type: integer
                example: 119
            X-RateLimit-Reset:
              description: >-
                Epoch seconds when the bucket would be full again, assuming no
                further requests.
              schema:
                type: integer
                example: 1700000060
        '400':
          description: >-
            `Aurous-Version` header is pinned to a value that is not a
            recognised version date or is malformed. Use a published date or
            omit the header to receive the platform default.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          headers:
            Aurous-Request-Id:
              description: Server-minted request id. Quote this in support tickets.
              schema:
                type: string
                example: req_01HXMQ7Z3K8Y2NABCDEFGHJKMP
            Aurous-Version:
              description: API version pin applied to this response (YYYY-MM-DD).
              schema:
                type: string
                example: '2026-07-16'
            X-RateLimit-Limit:
              description: Bucket capacity (max tokens) for this endpoint class.
              schema:
                type: integer
                example: 120
            X-RateLimit-Remaining:
              description: Tokens remaining after this request.
              schema:
                type: integer
                example: 119
            X-RateLimit-Reset:
              description: >-
                Epoch seconds when the bucket would be full again, assuming no
                further requests.
              schema:
                type: integer
                example: 1700000060
        '401':
          description: Unauthorized — missing or invalid API key.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          headers:
            Aurous-Request-Id:
              description: Server-minted request id. Quote this in support tickets.
              schema:
                type: string
                example: req_01HXMQ7Z3K8Y2NABCDEFGHJKMP
            Aurous-Version:
              description: API version pin applied to this response (YYYY-MM-DD).
              schema:
                type: string
                example: '2026-07-16'
            X-RateLimit-Limit:
              description: Bucket capacity (max tokens) for this endpoint class.
              schema:
                type: integer
                example: 120
            X-RateLimit-Remaining:
              description: Tokens remaining after this request.
              schema:
                type: integer
                example: 119
            X-RateLimit-Reset:
              description: >-
                Epoch seconds when the bucket would be full again, assuming no
                further requests.
              schema:
                type: integer
                example: 1700000060
        '403':
          description: >-
            Account not approved for closed beta. error.code is one of
            `account_pending`, `account_rejected`, `account_suspended`. There is
            no retry — contact support to be approved.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          headers:
            Aurous-Request-Id:
              description: Server-minted request id. Quote this in support tickets.
              schema:
                type: string
                example: req_01HXMQ7Z3K8Y2NABCDEFGHJKMP
            Aurous-Version:
              description: API version pin applied to this response (YYYY-MM-DD).
              schema:
                type: string
                example: '2026-07-16'
            X-RateLimit-Limit:
              description: Bucket capacity (max tokens) for this endpoint class.
              schema:
                type: integer
                example: 120
            X-RateLimit-Remaining:
              description: Tokens remaining after this request.
              schema:
                type: integer
                example: 119
            X-RateLimit-Reset:
              description: >-
                Epoch seconds when the bucket would be full again, assuming no
                further requests.
              schema:
                type: integer
                example: 1700000060
        '429':
          description: Rate limit exceeded — retry after the seconds in `Retry-After`.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          headers:
            Aurous-Request-Id:
              description: Server-minted request id. Quote this in support tickets.
              schema:
                type: string
                example: req_01HXMQ7Z3K8Y2NABCDEFGHJKMP
            Aurous-Version:
              description: API version pin applied to this response (YYYY-MM-DD).
              schema:
                type: string
                example: '2026-07-16'
            X-RateLimit-Limit:
              description: Bucket capacity (max tokens) for this endpoint class.
              schema:
                type: integer
                example: 120
            X-RateLimit-Remaining:
              description: Tokens remaining after this request.
              schema:
                type: integer
                example: 119
            X-RateLimit-Reset:
              description: >-
                Epoch seconds when the bucket would be full again, assuming no
                further requests.
              schema:
                type: integer
                example: 1700000060
            Retry-After:
              description: >-
                Seconds to wait before retrying. Present on 429 (rate limit) and
                on 503 provider_unavailable. Prefer this over computing
                X-RateLimit-Reset − now.
              schema:
                type: integer
                example: 12
      security:
        - api-key: []
components:
  schemas:
    ModelsListResponse:
      type: object
      properties:
        object:
          type: string
          description: Discriminator — always `list`.
          example: list
          enum:
            - list
        data:
          description: >-
            All active + public models in the catalog. Order matches the
            admin-configured `sort_order`. Empty catalog returns `data: []`
            (NEVER 404).
          type: array
          items:
            $ref: '#/components/schemas/ModelResponse'
      required:
        - object
        - data
    ErrorResponse:
      type: object
      properties:
        error:
          description: Error payload
          allOf:
            - $ref: '#/components/schemas/ErrorPayload'
      required:
        - error
    ModelResponse:
      type: object
      properties:
        object:
          type: string
          description: Discriminator — always `model`.
          example: model
          enum:
            - model
        id:
          type: string
          description: >-
            Public, customer-facing slug. STABLE — pin in production code. The
            opaque DB primary key is never exposed.
          example: aurous-chat-pro
        created:
          type: number
          description: >-
            Unix timestamp (seconds) for when this model record was created in
            the catalog. Mirrors OpenAI's field shape.
          example: 1716076800
        owned_by:
          type: string
          description: >-
            Owner of the model. Always `aurous` — we abstract the underlying
            providers.
          example: aurous
          enum:
            - aurous
        kind:
          type: string
          description: >-
            Model kind. `chat` models accept POST /v1/chat/completions;
            `embedding` models accept POST /v1/embeddings; `video` models
            publish a credits-denominated rate matrix under `video_pricing`.
          example: chat
          enum:
            - chat
            - embedding
            - video
        display_name:
          type: string
          description: >-
            Customer-facing display name (UI labels, model picker). Sanitized on
            the server before it is returned. May change without notice; do not
            key off this field — use `id` for stable identity.
          example: Aurous Chat Pro
        description:
          type: string
          description: >-
            Short marketing description of the model. Sanitized on the server on
            the same rule that applies to `display_name`. Empty string when the
            admin has not authored a description.
          example: Flagship multimodal chat model with 256K context.
        chat_pricing:
          description: >-
            Chat pricing — present (non-null) only when `kind === 'chat'`.
            `credits_per_M` reflects the caller's effective rate after per-team
            and per-model overrides. NOT frozen per `Aurous-Version`; recompute
            on every poll.
          nullable: true
          allOf:
            - $ref: '#/components/schemas/ChatPricing'
        embedding_pricing:
          description: >-
            Embedding pricing — present (non-null) only when `kind ===
            'embedding'`. Modalities the model does not bill for surface as
            `credits_per_M: 0` so the shape stays uniform.
          nullable: true
          allOf:
            - $ref: '#/components/schemas/EmbeddingPricing'
        video_pricing:
          description: >-
            Video pricing — present (non-null) only when `kind === 'video'`.
            Rates are credits per million VIDEO tokens, keyed by output
            resolution and whether the request includes video input. Listed
            rates use STANDARD (non-team) pricing; the credit hold and final
            charge for a specific request are echoed on the generation response.
          nullable: true
          allOf:
            - $ref: '#/components/schemas/VideoPricing'
        aurous_metadata:
          description: >-
            Aurous-specific metadata. Capabilities, lifecycle pointers, and
            embedding-only sizing live here so the OpenAI-compatible top-level
            fields stay clean for drop-in SDKs.
          allOf:
            - $ref: '#/components/schemas/ModelAurousMetadata'
      required:
        - object
        - id
        - created
        - owned_by
        - kind
        - display_name
        - description
        - chat_pricing
        - embedding_pricing
        - video_pricing
        - aurous_metadata
    ErrorPayload:
      type: object
      properties:
        type:
          type: string
          description: Broad error category
          example: invalid_request
          enum:
            - invalid_request
            - authentication
            - not_found
            - rate_limit
            - server_error
        code:
          type: string
          description: >-
            Stable error code (programmatic discriminator). Closed-beta gate
            emits one of `account_pending`, `account_rejected`,
            `account_suspended` on 403.
          example: balance_too_low
          enum:
            - invalid_request
            - missing_field
            - invalid_format
            - value_out_of_range
            - unsupported_lora_for_mode
            - generation_not_cancellable
            - prompt_blocked
            - reference_blocked
            - output_moderation_rejected
            - unknown_version
            - mutually_exclusive_input
            - character_not_ready
            - parameter_invalid_combination
            - too_many_reference_images
            - upload_invalid
            - balance_too_low
            - idempotency_key_in_use
            - api_key_not_found
            - payload_too_large
            - missing_api_key
            - invalid_api_key
            - revoked_api_key
            - resource_not_found
            - forbidden_resource
            - account_pending
            - account_rejected
            - account_suspended
            - already_approved
            - already_rejected
            - already_suspended
            - invalid_reinstate_target
            - invalid_suspend_target
            - cannot_moderate_admin
            - too_many_requests
            - concurrency_limit_exceeded
            - tpm_rate_limit_exceeded
            - internal_error
            - provider_unavailable
            - provider_timeout
            - provider_not_configured
            - invalid_time_range
            - invalid_bucket_width
            - too_many_buckets
            - too_many_group_by
            - invalid_filter
            - invalid_page_token
            - export_too_large
            - user_already_exists
            - self_invite_forbidden
            - invite_link_failed
            - invite_rate_limited
            - model_not_found
            - model_disabled
            - model_wrong_kind
            - max_tokens_exceeds_hard_cap
            - chat_model_misconfigured
            - embeddings_input_too_large
            - embeddings_unsupported_dimensions
            - pricing_frozen
            - provider_rate_limited
            - chat_provider_request_invalid
            - chat_provider_auth_failed
            - chat_provider_unavailable
            - max_input_tokens_exceeded
            - chat_provider_unknown_error
            - embeddings_provider_unknown_error
            - embeddings_batch_not_supported
            - embeddings_input_too_many_items
            - embeddings_video_unsupported
            - encoding_format_unsupported
            - missing_max_tokens_no_model_default
            - chat_cancel_target_not_found
            - chat_completion_not_found
            - chat_cancel_target_already_terminal
            - chat_cancel_target_not_cancellable
            - tool_choice_required_unsupported
            - response_format_too_large
            - response_format_too_deep
            - invalid_cursor
            - invalid_cursor_for_endpoint
            - model_slug_exists
            - output_expired
            - output_not_available
            - content_filtered
            - image_generation_failed
            - reference_media_invalid
            - reference_media_cap_reached
            - reference_fetch_failed
            - unsupported_auth_method
            - insufficient_scope
            - uploads_expired
            - provider_unknown_error
        message:
          type: string
          description: Human-readable message
          example: Team available balance is 1.5 credits, generation requires 2.0.
        param:
          type: object
          description: Field name when the error is parameter-scoped
          example: prompt
          nullable: true
        doc_url:
          type: string
          description: Documentation link for this error code
          example: https://docs.aurous-labs.com/errors#balance_too_low
        request_id:
          type: string
          description: Echoes Aurous-Request-Id — quote in support tickets
          example: req_01HXMQ7Z3K8Y2ABCDEFGHJKM
      required:
        - type
        - code
        - message
        - doc_url
        - request_id
    ChatPricing:
      type: object
      properties:
        input:
          description: Input-token pricing.
          allOf:
            - $ref: '#/components/schemas/ModelPricingDimension'
        output:
          description: Output-token pricing.
          allOf:
            - $ref: '#/components/schemas/ModelPricingDimension'
      required:
        - input
        - output
    EmbeddingPricing:
      type: object
      properties:
        text:
          description: Text-modality input pricing.
          allOf:
            - $ref: '#/components/schemas/ModelPricingDimension'
        visual:
          description: >-
            Visual-modality input pricing. Applies to `image_url` content parts.
            `video_url` input is no longer accepted on `POST /v1/embeddings`
            (rejected with `400 embeddings_video_unsupported`). Embed images via
            `image_url` parts only.
          allOf:
            - $ref: '#/components/schemas/ModelPricingDimension'
      required:
        - text
        - visual
    VideoPricing:
      type: object
      properties:
        unit:
          type: string
          description: >-
            Billing unit for every rate in `rates`. Always
            `credits_per_M_tokens`.
          example: credits_per_M_tokens
          enum:
            - credits_per_M_tokens
        rates:
          description: >-
            Rate matrix keyed by output resolution and whether the request
            includes video input. Listed rates use STANDARD (non-team) pricing —
            the catalog is team-agnostic. The exact credit hold and final charge
            for a specific request are always echoed on the generation response.
          type: array
          items:
            $ref: '#/components/schemas/VideoRateEntry'
      required:
        - unit
        - rates
    ModelAurousMetadata:
      type: object
      properties:
        context_window:
          type: number
          description: >-
            Maximum input context window in tokens. Includes prompt, system,
            tool descriptions, and accumulated chat history. Excludes the
            model's reserved output budget. Null when the kind is `embedding`
            (use `max_input_items` instead).
          example: 256000
          nullable: true
        default_max_output_tokens:
          type: number
          description: >-
            Default max_tokens applied when `max_tokens` is omitted on a POST
            /v1/chat/completions request. Holds and credit estimates use this
            value when no explicit cap is provided. Null for embedding models
            (no output budget concept).
          example: 4096
          nullable: true
        max_output_tokens_hard_cap:
          type: number
          description: >-
            Hard cap on `max_tokens` for POST /v1/chat/completions. Requests
            that exceed this cap are rejected with `400
            invalid_request:max_tokens_exceeds_hard_cap`. Null for embedding
            models.
          example: 128000
          nullable: true
        capabilities:
          description: >-
            Capability tags this model supports. Boolean flags only (e.g.,
            `streaming`, `tools`, `multimodal_input`, `structured_output`,
            `supports_logprobs`, `supports_seed`, `reasoning_effort`).
            Vendor-name tags are stripped to keep the brand surface clean.
            Array-valued capabilities (e.g., `dimensions` on embeddings) are
            surfaced as their own dedicated top-level fields.
          example:
            - streaming
            - tools
            - structured_output
          type: array
          items:
            type: string
        dimensions:
          description: >-
            Supported embedding output dimensions (request as `dimensions` on
            POST /v1/embeddings). Defaults to the first entry when the request
            omits it. Null for chat models.
          example:
            - 256
            - 512
            - 1024
          nullable: true
          type: array
          items:
            type: number
        max_input_items:
          type: number
          description: >-
            Max number of input items per POST /v1/embeddings request. Null for
            chat models.
          example: 96
          nullable: true
        resolutions:
          description: >-
            Output resolutions this video model supports. Cross-reference with
            `video_pricing.rates[].resolutions` for the per-resolution billing
            rate. Null for chat and embedding models.
          example:
            - 480p
            - 720p
            - 1080p
            - 4k
          nullable: true
          type: array
          items:
            type: string
        duration:
          description: >-
            Supported output clip duration range in seconds. Null for chat and
            embedding models.
          nullable: true
          allOf:
            - $ref: '#/components/schemas/VideoDurationRange'
        fps:
          type: number
          description: >-
            Output frame rate in frames per second. Null for chat and embedding
            models.
          example: 24
          nullable: true
        aliases:
          description: >-
            Alternate model ids accepted wherever a model id is accepted; each
            alias resolves to this model. Prefer `id` for stable pinning. Null
            for chat and embedding models.
          example:
            - seedance-2.0
            - seedance-2.0-pro
          nullable: true
          type: array
          items:
            type: string
        deprecated_at:
          type: string
          description: >-
            ISO 8601 timestamp after which the model is scheduled for removal.
            Null when the model is not scheduled for deprecation. Customers
            integrate against this field to build migration alerts BEFORE the
            model goes dark.
          example: null
          nullable: true
        replaced_by_slug:
          type: string
          description: >-
            Slug of the recommended replacement model when `deprecated_at` is
            set. Null when no successor is published. Pair with `deprecated_at`
            to swap automatically on deprecation.
          example: null
          nullable: true
      required:
        - context_window
        - default_max_output_tokens
        - max_output_tokens_hard_cap
        - capabilities
        - deprecated_at
        - replaced_by_slug
    ModelPricingDimension:
      type: object
      properties:
        credits_per_M:
          type: number
          description: >-
            Credits per million tokens at the caller's effective rate. Customers
            can compute credits-per-1K by dividing by 1000. Reflects the team's
            pricing overrides (per-team markup, per-model markup, per-team
            credit anchor) when present; otherwise the platform default.
            Recompute on every poll — overrides may be flipped without advancing
            `Aurous-Version`.
          example: 75
      required:
        - credits_per_M
    VideoRateEntry:
      type: object
      properties:
        resolutions:
          description: >-
            Output resolutions this rate applies to. Match the resolution you
            request (e.g. `720p`) against this array to find your billing rate.
          example:
            - 720p
          type: array
          items:
            type: string
        video_input:
          type: boolean
          description: >-
            Whether this rate applies to requests that include video input
            (reference video). `false` = text/image-driven generation; `true` =
            video-driven generation (typically cheaper per token).
          example: false
        credits_per_M:
          type: number
          description: >-
            Credits per million video tokens for this cell. Divide by 1000 for
            credits per 1K tokens. Video tokens scale with clip duration, output
            resolution, and frame rate.
          example: 1138.8889
      required:
        - resolutions
        - video_input
        - credits_per_M
    VideoDurationRange:
      type: object
      properties:
        min:
          type: number
          description: Minimum clip duration in seconds.
          example: 4
        max:
          type: number
          description: Maximum clip duration in seconds.
          example: 15
        adaptive:
          type: boolean
          description: >-
            When true, the model may choose a duration within [min, max] on
            requests that ask for an adaptive-length clip.
          example: true
      required:
        - min
        - max
        - adaptive
  securitySchemes:
    api-key:
      type: apiKey
      in: header
      name: X-Api-Key
      description: Your team API key (starts with `al_live_`).

````