> ## 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, video, and image models

> Returns the catalog of chat, embedding, video, and image 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), `video_pricing` (video models), or `image_pricing` (image 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. Image rates are a small closed tier list in credits per generated image, keyed by output pixel count; listed image rates also use standard (non-team) pricing. Customers can compute credits-per-1K by dividing the published `credits_per_M` value by 1000. New model kinds may be added over time — clients should skip entries with an unrecognized `kind` rather than failing to parse the response. When the catalog is empty the response is `200` with `data: []` — never `404`. No query, path, or body parameters are accepted. 

Chat, embedding, image, and video rates are all NOT frozen per `Aurous-Version` — they track the most recently published rate version for each model, because provider economics and per-model markup are tuned more often than the API contract changes. The receipt echoed on every chat / embedding response (and the cost breakdown on every image / video generation) carries the exact rate that applied at dispatch or hold time, so audit trails remain stable even as the underlying rate card changes. `Aurous-Version` still governs request/response shapes — pin it for stable shapes, but call the relevant estimate or models endpoint for a current price immediately before you generate.



## 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` — omit it and the platform default applies (currently
    `2026-08-26`).


    ## 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": "1_5k_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, video, and image models
      description: >-
        Returns the catalog of chat, embedding, video, and image 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), `video_pricing` (video models),
        or `image_pricing` (image 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. Image rates are a small closed
        tier list in credits per generated image, keyed by output pixel count;
        listed image rates also use standard (non-team) pricing. Customers can
        compute credits-per-1K by dividing the published `credits_per_M` value
        by 1000. New model kinds may be added over time — clients should skip
        entries with an unrecognized `kind` rather than failing to parse the
        response. When the catalog is empty the response is `200` with `data:
        []` — never `404`. No query, path, or body parameters are accepted. 


        Chat, embedding, image, and video rates are all NOT frozen per
        `Aurous-Version` — they track the most recently published rate version
        for each model, because provider economics and per-model markup are
        tuned more often than the API contract changes. The receipt echoed on
        every chat / embedding response (and the cost breakdown on every image /
        video generation) carries the exact rate that applied at dispatch or
        hold time, so audit trails remain stable even as the underlying rate
        card changes. `Aurous-Version` still governs request/response shapes —
        pin it for stable shapes, but call the relevant estimate or models
        endpoint for a current price immediately before you generate.
      operationId: V1ModelsController_list
      parameters:
        - name: Aurous-Version
          in: header
          required: false
          description: >-
            Optional API version pin (YYYY-MM-DD). Omit the header to receive
            the platform default, currently `2026-08-26`.
          schema:
            type: string
            example: '2026-08-26'
            pattern: ^\d{4}-\d{2}-\d{2}$
      responses:
        '200':
          description: List of available chat, embedding, video, and image 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-08-26'
            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-08-26'
            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-08-26'
            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-08-26'
            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-08-26'
            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`;
            `image` models publish a per-tier credit rate under `image_pricing`.
            New kinds may be added over time — clients should skip entries with
            an unrecognized `kind` rather than failing to parse the response.
          example: chat
          enum:
            - chat
            - embedding
            - video
            - image
        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'
        image_pricing:
          description: >-
            Image pricing — present (non-null) only when `kind === 'image'`. A
            closed list of pixel-bounded tiers under `tiers`, each with its own
            credits-per-image rate. Listed rates use STANDARD (non-team)
            pricing; the exact credit charge for a specific request is echoed on
            the generation response.
          nullable: true
          allOf:
            - $ref: '#/components/schemas/ImagePricing'
        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
        - image_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
            - style_retired
            - parameter_invalid
            - too_many_reference_images
            - action_not_available
            - 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
            - character_resynthesize_in_progress
            - provider_unknown_error
            - first_frame_too_small
        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_01HXMQ7Z3K8Y2VNABCDEFGHJKM
      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
    ImagePricing:
      type: object
      properties:
        unit:
          type: string
          description: Billing unit for every rate in `tiers`. Always `credits_per_image`.
          example: credits_per_image
          enum:
            - credits_per_image
        tiers:
          description: >-
            Closed, ascending list of pixel-bounded pricing tiers. Match your
            SNAPPED output pixel count (not your raw requested width × height)
            against `max_output_px` on each entry — see that field's own
            description for the exact rule. The list is never partial: every
            tier that appears is a valid, billable rate.
          type: array
          items:
            $ref: '#/components/schemas/ImagePricingTier'
        reference_images:
          type: string
          description: >-
            Whether providing reference images alongside your generation request
            adds to the credit charge. Currently always `free` — reference
            images never increase the price. Open set: additional values may be
            introduced in the future if this policy changes for some tier or
            reference type — do not assume `free` is the only value forever.
          example: free
      required:
        - unit
        - tiers
        - reference_images
    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
    ImagePricingTier:
      type: object
      properties:
        tier:
          type: string
          description: >-
            Size tier this rate applies to. Currently `standard` | `large`;
            additional tiers would be introduced with advance changelog notice
            before appearing here — treat this as an open set, not a fixed enum.
          example: standard
        max_output_px:
          type: number
          description: >-
            Inclusive upper bound on output pixels (width × height, AFTER
            server-side size snapping) covered by this tier — e.g. 2,360,000px ≈
            2.36 MP. `null` on the terminal tier: open-ended, no upper bound.
            Match rule: walk `tiers` in order and pick the first one whose
            `max_output_px` is `null` or is ≥ your SNAPPED output pixel count —
            the same post-snap value this field itself is measured in, not your
            raw requested width × height (the response echoes no width/height,
            so the snap is not independently observable).
          example: 2360000
          nullable: true
        credits_per_image:
          type: number
          description: >-
            Credits charged per generated image at this tier. Uses STANDARD
            (team-agnostic) pricing — the published number is the platform
            default; the exact credit charge for a specific request is always
            echoed on the generation response. NOT frozen per `Aurous-Version` —
            rates may change without a version bump, so recompute immediately
            before you generate rather than caching this value indefinitely.
          example: 6.5
      required:
        - tier
        - max_output_px
        - credits_per_image
    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_`).

````