> ## Documentation Index
> Fetch the complete documentation index at: https://veniceai-tombystrican-api-103-update-and-re-enable-public-s.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Queue Video Generation

> Queue a new video generation request.

**Authentication:** This endpoint accepts either a Bearer API key or a `SIGN-IN-WITH-X` header for x402 wallet-based authentication. The legacy `X-Sign-In-With-X` header is also accepted during migration. When using x402, a `402 Payment Required` response indicates insufficient balance and includes top-up instructions.

Call `/video/quote` to get a price estimate, then poll `/video/retrieve` with the returned `queue_id` until complete.

Private models also return a `download_url` for the finished video. It is a short-lived delivery URL (a few retries are fine if a download drops); see the [Video Generation guide](/guides/media/video-generation#private-download-links) for details and optional `DELETE` for privacy.

### Seedance 2.0 & 2.5

For `seedance-2-0-*-api` and `seedance-2-5-*-api` models (text-to-video, image-to-video, reference-to-video, plus the Seedance 2.0 `-fast-*` variants), see the [Seedance 2.0 & 2.5 Guide](/guides/media/seedance-2-0) for the four-workflow model (Reference / Edit / Extend / Stitch), family-specific multimodal limits, faces-off API behavior, and pricing details.

### Seedance faces-off API

Public Seedance models do **not** support face-asset provisioning or face-consent attestation. Face-bearing inputs may be rejected upstream. For likeness / face-asset generation, use the Venice app or Studio. See the [Seedance guide](/guides/media/seedance-2-0) for details.

### Video upscaling

For the `topaz-video-upscale` model, use `upscale_factor` (1, 2, or 4) instead of `resolution`, and provide a `video_url`. Duration and FPS are detected automatically from the video file. See the [Video Upscaling Guide](/guides/media/video-upscaling) for full details and examples.

***


## OpenAPI

````yaml POST /video/queue
openapi: 3.0.0
info:
  description: The Venice.ai API.
  termsOfService: https://venice.ai/legal/tos
  title: Venice.ai API
  version: '20260806.142021'
  x-guidance: >-
    Venice.ai is an OpenAI-compatible inference API supporting text, image,
    audio, and video generation.


    **Authentication options:**

    - API Key: Use Bearer token in Authorization header

    - x402 Wallet: Use USDC credits via EVM or Solana wallet (no account
    required)


    **For x402 wallet access:**

    1. POST /x402/top-up without headers to get payment requirements

    2. Choose one of the returned Base or Solana payment options and sign a USDC
    payment using the x402 SDK

    3. POST /x402/top-up with PAYMENT-SIGNATURE header to add credits

    4. Call any inference endpoint with SIGN-IN-WITH-X header


    **Pricing:** Prepaid credits consumed per request. Check /models for
    available models and their capabilities.
servers:
  - url: https://api.venice.ai/api/v1
security:
  - BearerAuth: []
tags:
  - description: >-
      Generate speech/audio, transcribe audio, and manage asynchronous audio
      generation jobs.
    name: Audio
  - description: >-
      Given a list of messages comprising a conversation, the model will return
      a response. Supports multimodal inputs including text, images, audio
      (input_audio), and video (video_url) for compatible models.
    name: Chat
  - description: List and describe the various models available in the API.
    name: Models
  - description: Generate and manipulate images using AI models.
    name: Image
  - description: Generate videos using AI models.
    name: Video
  - description: List and retrieve character information for use in completions.
    name: Characters
  - description: >-
      Billing and usage analytics. **Beta**: This API is currently in beta and
      may be unstable. Endpoints, request/response schemas, and behavior may
      change without notice.
    name: Billing
  - description: Proxy JSON-RPC requests to blockchain nodes. Billed per credit.
    name: Crypto RPC
  - description: >-
      Wallet-based API access using the x402 protocol. No API key required —
      authenticate with an EVM or Solana wallet.


      **How it works:**

      1. **Authenticate** — Send a `SIGN-IN-WITH-X` header (base64-encoded
      signed SIWX payload) with any request. EVM wallets sign an EIP-4361 SIWE
      message; Solana wallets sign the Solana SIWX message with Ed25519. See the
      `siwx` security scheme for the exact format.

      2. **Top up** — `POST /x402/top-up` without a payment header returns an
      `accepts` array with Base and Solana USDC payment options. Choose one
      entry, sign it using the x402 SDK (`npm install x402`), and re-submit with
      the `PAYMENT-SIGNATURE` header (the legacy `X-402-Payment` and `X-PAYMENT`
      names are also accepted).

      3. **Use any endpoint** — All inference endpoints (chat, image, audio,
      video, embeddings) accept `siwx` as an alternative to `BearerAuth`.
      Charges are deducted from your USDC credit balance.

      4. **Monitor balance** — `GET /x402/balance/{walletAddress}` returns your
      current balance. The `X-Balance-Remaining` response header on inference
      calls also reports it.


      **Quick start (5 lines):**

      ```

      import { VeniceClient } from '@venice-ai/x402-client'

      const venice = new VeniceClient(process.env.WALLET_KEY)

      await venice.topUp(10) // $10 USDC on a supported x402 rail

      const res = await venice.chat({ model: 'zai-org-glm-5-1', messages: [{
      role: 'user', content: 'Hello!' }] })

      ```


      **Payment:** USDC on Base (chain ID 8453) or Solana mainnet. Minimum
      top-up: $5. Alternatively, stake DIEM tokens for daily credits (1 DIEM =
      $1/day).
    name: x402
externalDocs:
  description: Venice.ai API documentation
  url: https://docs.venice.ai
paths:
  /video/queue:
    post:
      tags:
        - Video
      summary: /api/v1/video/queue
      description: >-
        Queue a new video generation request.


        **Authentication:** This endpoint accepts either a Bearer API key or a
        `SIGN-IN-WITH-X` header for x402 wallet-based authentication. The legacy
        `X-Sign-In-With-X` header is also accepted during migration. When using
        x402, a `402 Payment Required` response indicates insufficient balance
        and includes top-up instructions.
      operationId: queueVideo
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/QueueVideoRequest'
      responses:
        '200':
          description: Video generation request queued successfully
          headers:
            X-Balance-Remaining:
              description: >-
                Remaining x402 credit balance in USD after this request (only
                present for x402 auth).
              required: false
              schema:
                type: string
                example: '4.230000'
          content:
            application/json:
              schema:
                type: object
                properties:
                  model:
                    type: string
                    description: The ID of the model used for video generation.
                    example: video-model-123
                  queue_id:
                    type: string
                    description: The ID of the video generation request.
                    example: 123e4567-e89b-12d3-a456-426614174000
                  download_url:
                    type: string
                    description: >-
                      Pre-signed URL to download the completed video. Only
                      present for VPS-backed models. When provided, the retrieve
                      endpoint returns JSON status only (no video stream). Fetch
                      this URL after status is COMPLETED to get the video/mp4
                      file. Valid for 24 hours.
                required:
                  - model
                  - queue_id
                additionalProperties: false
        '400':
          description: Invalid request parameters
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DetailedError'
        '401':
          description: |-
            - Authentication failed
            - This model is only available to Pro users
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StandardError'
        '402':
          description: >-
            Payment or balance required. Response varies by authentication
            state:


            **API Key users:** Standard error response with
            `INSUFFICIENT_BALANCE` code. Top up your Venice balance at
            venice.ai.


            **Unauthenticated x402 discovery:** Structured x402 response with
            `x402Version`, `resource`, `accepts`, and
            `extensions["sign-in-with-x"]`. The `accepts` array advertises Base
            and Solana payment requirements.


            **Authenticated x402 wallet users with insufficient credit:**
            Structured response with `PAYMENT_REQUIRED` code containing:

            - `topUpInstructions`: Step-by-step guide to top up via x402
            protocol

            - `supportedTokens` / `supportedChains`: Accepted payment methods

            - `siwxChallenge`: Fresh Sign-In-With-X challenge metadata


            The `PAYMENT-REQUIRED` header also contains a base64-encoded x402
            protocol object with the payment requirements for programmatic
            discovery.
          headers:
            PAYMENT-REQUIRED:
              description: >-
                Base64-encoded JSON with x402 payment requirements. Present on
                x402 middleware 402 responses. Decode to choose and sign one
                accepted payment requirement programmatically.
              required: false
              schema:
                type: string
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/StandardError'
                  - $ref: '#/components/schemas/X402InferencePaymentRequired'
        '403':
          description: >-
            The specified model is unavailable in your region. Use of Tor, VPNs,
            proxies, or other means to circumvent this restriction is a
            violation of our Terms of Service.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StandardError'
        '409':
          description: Seedance consent is required before this request can be queued
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                        enum:
                          - needs_consent
                      message:
                        type: string
                    required:
                      - code
                      - message
                    additionalProperties: false
                  consent_flow:
                    type: string
                    enum:
                      - seedance
                  face_media_roles:
                    type: array
                    items:
                      type: string
                      enum:
                        - image
                        - end_image
                        - reference_image
                        - video
                        - reference_video
                  consent:
                    type: object
                    properties:
                      consent_version:
                        type: string
                      policy_text:
                        type: string
                    required:
                      - consent_version
                      - policy_text
                    additionalProperties: false
                  docs_url:
                    type: string
                required:
                  - error
                  - consent_flow
                  - face_media_roles
                  - consent
                  - docs_url
                additionalProperties: false
        '413':
          description: >-
            The request payload is too large. Please reduce the size of your
            request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PayloadTooLargeError'
        '422':
          description: >-
            Your prompt violates the content policy of Venice.ai or the model
            provider
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ContentViolationError'
        '500':
          description: Inference processing failed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StandardError'
      security:
        - BearerAuth: []
        - siwx: []
components:
  schemas:
    QueueVideoRequest:
      type: object
      properties:
        model:
          type: string
          description: The model to use for video generation.
          example: seedance-2-0-text-to-video
        consents:
          type: object
          properties:
            seedance:
              type: object
              properties:
                confirmed_terms_and_privacy:
                  type: boolean
                  enum:
                    - true
                  description: >-
                    Confirms acceptance of the current Seedance face-media
                    policy text returned in the needs_consent response.
                  example: true
                confirmed_legal_right:
                  type: boolean
                  enum:
                    - true
                  description: >-
                    Confirms the API user has the legal right to use the
                    face-bearing media.
                  example: true
                confirmed_screening_acknowledged:
                  type: boolean
                  enum:
                    - true
                  description: >-
                    Acknowledges that submitted media may be screened before
                    private asset submission.
                  example: true
              required:
                - confirmed_terms_and_privacy
                - confirmed_legal_right
                - confirmed_screening_acknowledged
          description: >-
            Optional provider-specific consent attestations. Seedance consent is
            required only when submitted media contains faces.
        prompt:
          type: string
          minLength: 1
          maxLength: 20000
          description: >-
            The prompt to use for video generation. Required for most models.
            The maximum length varies by model (default 2500 characters, up to
            20000 for some models).
          example: Commerce being conducted in the city of Venice, Italy.
        negative_prompt:
          type: string
          maxLength: 20000
          description: >-
            Optional negative prompt. The maximum length varies by model
            (default 2500 characters, up to 20000 for some models).
          example: low resolution, error, worst quality, low quality, defects
        duration:
          type: string
          enum:
            - 1s
            - 2s
            - 3s
            - 4s
            - 5s
            - 6s
            - 7s
            - 8s
            - 9s
            - 10s
            - 11s
            - 12s
            - 13s
            - 14s
            - 15s
            - 16s
            - 17s
            - 18s
            - 19s
            - 20s
            - 21s
            - 22s
            - 23s
            - 24s
            - 25s
            - 26s
            - 27s
            - 28s
            - 29s
            - 30s
            - 1 gen
            - Auto
          description: >-
            The duration of the video to generate. Available options vary by
            model.
          example: 10s
        aspect_ratio:
          type: string
          enum:
            - '1:1'
            - '2:3'
            - '3:2'
            - '3:4'
            - '4:3'
            - '4:5'
            - '5:4'
            - '9:16'
            - '9:21'
            - '16:9'
            - '21:9'
            - adaptive
            - auto
          description: >-
            The aspect ratio of the video. Available options vary by model. Some
            models do not support aspect_ratio.
          example: '16:9'
        resolution:
          type: string
          enum:
            - 256p
            - 360p
            - 480p
            - 540p
            - 580p
            - 720p
            - 1080p
            - 1440p
            - 2160p
            - 4k
            - 2x
            - 4x
            - 2K
            - 768P
            - true_1080p
          description: >-
            The resolution of the video. Available options vary by model. Some
            models do not support resolution. Use upscale_factor for upscale
            models.
          example: 720p
        upscale_factor:
          type: integer
          description: >-
            For upscale models only. 1 = quality enhancement, 2 = double
            resolution (default), 4 = quadruple.
          enum:
            - 1
            - 2
            - 4
          default: 2
          example: 2
        audio:
          type: boolean
          default: true
          description: >-
            For models which support audio generation and configuration.
            Defaults to true.
          example: true
        image_url:
          type: string
          description: >-
            For image-to-video models, the reference image. Must be a URL
            (http/https) or a data URL (data:image/...).
          example: data:image/png;base64,iVBORw0K...
        end_image_url:
          type: string
          description: >-
            For models that support end images or transitions, the end frame
            image. Must be a URL or data URL.
          example: data:image/png;base64,iVBORw0K...
        audio_url:
          type: string
          description: >-
            For models that support audio input, background music. Must be a URL
            or data URL. Supported: WAV, MP3. Max: 30s, 15MB.
          example: data:audio/mpeg;base64,SUQzBAA...
        video_url:
          type: string
          description: >-
            For models that support video input (video-to-video, upscale). Must
            be a URL or data URL. Supported: MP4, MOV, WebM.
          example: data:video/mp4;base64,AAAAFGZ0eXA...
        reference_image_urls:
          type: array
          items:
            type: string
          maxItems: 30
          description: >-
            For models with reference image support, up to 30 images for
            character/style consistency. Each must be a URL or data URL.
          example:
            - data:image/png;base64,iVBORw0K...
        reference_video_urls:
          type: array
          items:
            type: string
          maxItems: 10
          description: >-
            For models with reference video support (e.g. Seedance 2.0 R2V), up
            to 10 reference video URLs (`role: "reference_video"`) used to
            inherit subject motion, camera movement, and overall style. Per-clip
            2–15 s, .mp4 or .mov, ≤50 MB; aggregate duration ≤15 s. Each must be
            a URL or data URL.
          example:
            - https://example.com/reference-clip.mp4
        reference_audio_urls:
          type: array
          items:
            type: string
          maxItems: 10
          description: >-
            For models with reference audio support (e.g. Seedance 2.0 R2V), up
            to 10 reference audio URLs (`role: "reference_audio"`) used as
            donors for vocal timbre, narration, or sound effects. Per-clip 2–15
            s, .wav or .mp3; aggregate duration ≤15 s. Must be paired with at
            least one reference image or reference video — audio-only Reference
            workflows are rejected at validation. Each must be a URL or data
            URL.
          example:
            - data:audio/mpeg;base64,SUQzBAAAAAA...
        elements:
          type: array
          items:
            type: object
            properties:
              frontal_image_url:
                type: string
              reference_image_urls:
                type: array
                items:
                  type: string
                maxItems: 3
              video_url:
                type: string
          maxItems: 4
          description: >-
            For models with advanced element support (e.g., Kling O3 R2V). Up to
            4 elements defining characters/objects. Reference in prompt as
            @Element1, @Element2, etc.
          example:
            - frontal_image_url: data:image/png;base64,iVBORw0K...
              reference_image_urls:
                - data:image/png;base64,iVBORw0K...
        scene_image_urls:
          type: array
          items:
            type: string
          maxItems: 4
          description: >-
            For models with advanced element support. Up to 4 scene reference
            images. Reference in prompt as @Image1, @Image2, etc.
          example:
            - data:image/png;base64,iVBORw0K...
        keyframes:
          type: array
          items:
            type: object
            properties:
              image_url:
                type: string
              frame_index:
                type: integer
                minimum: 0
            required:
              - image_url
              - frame_index
          maxItems: 10
          description: >-
            For keyframe-driven models. Up to 10 keyframe images pinned to frame
            positions in the generated 24 fps video. Each frame_index must be
            unique and no greater than duration × 24.
          example:
            - image_url: data:image/png;base64,iVBORw0K...
              frame_index: 0
            - image_url: data:image/png;base64,iVBORw0K...
              frame_index: 120
      required:
        - model
        - prompt
        - duration
      description: >-
        Request body for video generation. Available fields and valid values
        vary by model.
    DetailedError:
      type: object
      properties:
        details:
          type: object
          properties: {}
          description: Details about the incorrect input
          example:
            _errors: []
            field:
              _errors:
                - Field is required
        error:
          type: string
          description: A description of the error
      required:
        - error
    StandardError:
      type: object
      properties:
        error:
          type: string
          description: A description of the error
      required:
        - error
    X402InferencePaymentRequired:
      anyOf:
        - type: object
          properties:
            x402Version:
              type: number
              description: x402 protocol version.
              example: 2
            error:
              type: string
              description: Human-readable payment requirement message.
              example: Payment required
            resource:
              type: object
              properties:
                url:
                  type: string
                  description: Protected resource URL.
                  example: https://api.venice.ai/api/v1/chat/completions
                description:
                  type: string
                  description: Human-readable resource description.
                  example: Venice API
                mimeType:
                  type: string
                  description: Resource MIME type.
                  example: application/json
              required:
                - url
                - description
                - mimeType
              additionalProperties: false
            accepts:
              type: array
              items:
                type: object
                properties:
                  scheme:
                    type: string
                    enum:
                      - exact
                    description: x402 payment scheme.
                    example: exact
                  network:
                    type: string
                    description: Payment network for this requirement.
                    example: solana
                  asset:
                    type: string
                    description: USDC token address or mint for the selected network.
                    example: EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v
                  amount:
                    type: string
                    description: >-
                      Required payment amount in base units (USDC has 6
                      decimals).
                    example: '10000000'
                  payTo:
                    type: string
                    description: Receiver wallet address for the selected network.
                    example: 8qUL23aSj7mDWdoLMXGHFvnVCT9wd7jXcysiekroADEL
                  maxTimeoutSeconds:
                    type: number
                    description: Maximum time allowed for payment settlement.
                    example: 300
                  extra:
                    type: object
                    properties: {}
                    description: >-
                      Network-specific x402 metadata. Solana requirements
                      include a feePayer.
                    example:
                      name: USD Coin
                      version: '2'
                      feePayer: BFK9TLC3edb13K6v4YyH3DwPb5DSUpkWvb7XnqCL9b4F
                required:
                  - scheme
                  - network
                  - asset
                  - amount
                  - payTo
                  - maxTimeoutSeconds
                  - extra
                additionalProperties: false
              description: >-
                Protocol payment requirements. Clients should choose one entry,
                such as Base or Solana, and sign exactly that requirement.
            extensions:
              type: object
              properties: {}
              description: >-
                Protocol extensions. Inference 402 responses include
                `sign-in-with-x` with a SIWX challenge for wallet-credit
                authentication.
            authOptions:
              type: object
              properties:
                apiKey:
                  type: object
                  properties:
                    header:
                      type: string
                      description: API key authentication header format.
                      example: 'Authorization: Bearer YOUR_API_KEY'
                    getKey:
                      type: string
                      description: Where to create or manage API keys.
                      example: https://venice.ai/settings/api
                    docs:
                      type: string
                      description: API key documentation URL.
                      example: https://docs.venice.ai/api-reference
                  required:
                    - header
                    - getKey
                    - docs
                  additionalProperties: false
                x402Wallet:
                  type: object
                  properties:
                    header:
                      type: string
                      description: Header used for Sign-In-With-X wallet authentication.
                      example: SIGN-IN-WITH-X
                    legacyHeader:
                      type: string
                      description: Legacy Sign-In-With-X header accepted during migration.
                      example: X-Sign-In-With-X
                    topUp:
                      type: string
                      description: >-
                        Endpoint used to discover and submit x402 top-up
                        payments.
                      example: POST /api/v1/x402/top-up
                    docs:
                      type: string
                      description: x402 top-up API documentation URL.
                      example: >-
                        https://docs.venice.ai/api-reference/endpoint/x402/top-up
                  required:
                    - header
                    - legacyHeader
                    - topUp
                    - docs
                  additionalProperties: false
              required:
                - apiKey
                - x402Wallet
              additionalProperties: false
          required:
            - x402Version
            - resource
            - accepts
            - authOptions
          additionalProperties: false
          description: >-
            Returned when an inference request has no API key or wallet
            authentication. The JSON body includes x402 discovery requirements
            and authentication options.
        - type: object
          properties:
            error:
              type: string
              enum:
                - Payment required
              description: Error message indicating payment is required.
            code:
              type: string
              enum:
                - PAYMENT_REQUIRED
              description: Machine-readable error code.
            reason:
              type: string
              enum:
                - insufficient_balance
              description: Reason the x402-authenticated request could not proceed.
            message:
              type: string
              description: Human-readable context about the payment requirement.
              example: Insufficient x402 balance
            currentBalanceUsd:
              type: number
              description: Current x402 credit balance for the wallet.
              example: 0.01
            minimumBalanceUsd:
              type: number
              description: Minimum x402 credit balance required before the request can run.
              example: 0.1
            description:
              type: string
              description: Protected resource description.
              example: Venice API
            suggestedTopUpUsd:
              type: number
              description: Suggested amount to top up in USD.
              example: 10
            minimumTopUpUsd:
              type: number
              description: Minimum allowed top-up amount in USD.
              example: 5
            supportedTokens:
              type: array
              items:
                type: string
              description: List of supported token symbols for payment.
              example:
                - USDC
            supportedChains:
              type: array
              items:
                type: string
              description: List of supported top-up rails.
              example:
                - base
                - solana
            topUpInstructions:
              type: object
              properties:
                step1:
                  type: string
                  description: 'First step: get payment requirements.'
                  example: >-
                    POST /api/v1/x402/top-up with no payment header to get
                    payment requirements
                step2:
                  type: string
                  description: 'Second step: sign the payment.'
                  example: >-
                    Choose a payment option from accepts and sign a USDC
                    transfer authorization using the x402 SDK
                    (createPaymentHeader)
                step3:
                  type: string
                  description: 'Third step: submit the payment.'
                  example: >-
                    POST /api/v1/x402/top-up with the signed PAYMENT-SIGNATURE
                    header
                receiverWallet:
                  type: string
                  description: >-
                    Legacy Base receiver wallet address. Prefer the selected
                    accepts entry from /x402/top-up for network-specific payTo
                    values.
                  example: <RECEIVER_WALLET_ADDRESS>
                tokenAddress:
                  type: string
                  description: >-
                    Legacy Base USDC token address. Prefer the selected accepts
                    entry from /x402/top-up for network-specific assets.
                  example: <USDC_TOKEN_ADDRESS>
                tokenDecimals:
                  type: number
                  description: Token decimal places.
                  example: 6
                network:
                  type: string
                  description: >-
                    Legacy Base target network. Prefer the selected accepts
                    entry from /x402/top-up for network-specific values.
                  example: eip155:8453
                minimumAmountUsd:
                  type: number
                  description: Minimum top-up amount in USD.
                  example: 5
              required:
                - step1
                - step2
                - step3
                - receiverWallet
                - tokenAddress
                - tokenDecimals
                - network
                - minimumAmountUsd
              additionalProperties: false
            siwxChallenge:
              type: object
              properties:
                info:
                  type: object
                  properties:
                    domain:
                      type: string
                      description: Domain for the SIWX challenge.
                      example: api.venice.ai
                    uri:
                      type: string
                      description: Resource URI for the challenge.
                      example: https://api.venice.ai/api/v1/chat/completions
                    version:
                      type: string
                      description: SIWX version.
                      example: '1'
                    nonce:
                      type: string
                      description: Unique nonce for replay protection.
                      example: '{{nonce}}'
                    issuedAt:
                      type: string
                      description: ISO timestamp when the challenge was issued.
                      example: '2026-04-09T12:00:00.000Z'
                    expirationTime:
                      type: string
                      description: ISO timestamp when the challenge expires.
                      example: '2026-04-09T12:05:00.000Z'
                    statement:
                      type: string
                      description: Human-readable statement for the signature.
                      example: Sign in to Venice AI
                  required:
                    - domain
                    - uri
                    - version
                    - nonce
                    - issuedAt
                    - expirationTime
                    - statement
                  additionalProperties: false
                supportedChains:
                  type: array
                  items:
                    type: object
                    properties:
                      chainId:
                        type: string
                        description: Supported chain identity.
                        example: solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp
                      type:
                        type: string
                        enum:
                          - eip191
                          - eip1271
                          - ed25519
                        description: Signature type accepted for this chain.
                        example: ed25519
                    required:
                      - chainId
                      - type
                    additionalProperties: false
                  description: Supported SIWX chains and signature types.
              required:
                - info
                - supportedChains
              additionalProperties: false
          required:
            - error
            - code
            - reason
            - suggestedTopUpUsd
            - minimumTopUpUsd
            - supportedTokens
            - supportedChains
            - topUpInstructions
            - siwxChallenge
          additionalProperties: false
    PayloadTooLargeError:
      type: object
      properties:
        code:
          type: string
          enum:
            - PAYLOAD_TOO_LARGE
          description: Machine-readable error code.
          example: PAYLOAD_TOO_LARGE
        error:
          type: string
          description: A description of the error
          example: File exceeds the maximum allowed size of 25 MB.
      required:
        - code
        - error
    ContentViolationError:
      type: object
      properties:
        error:
          type: string
          description: A description of the error
        suggested_prompt:
          type: string
          description: >-
            An optional provider-suggested replacement prompt that complies with
            content policy.
          example: >-
            A cinematic instrumental track inspired by stormy weather and
            dramatic tension.
      required:
        - error
  securitySchemes:
    BearerAuth:
      bearerFormat: JWT
      scheme: bearer
      type: http
    siwx:
      description: >-
        Wallet-based authentication using the x402 protocol (Sign-In-With-X).
        Supports EVM SIWE signatures on Base and Ed25519 signatures on Solana
        mainnet.


        **Header format:** Base64-encoded JSON object with the following fields:

        - `address` — EVM or Solana wallet address

        - `message` — Signed SIWX message. EVM wallets use EIP-4361 SIWE; Solana
        wallets use the Solana SIWX message format.

        - `signature` — Signature of the message, signed by the wallet's private
        key. EVM signatures are hex; Solana signatures may be base58 or base64.

        - `timestamp` — Unix timestamp in milliseconds

        - `chainId` — Chain identity. Use `8453`, `"8453"`, or `"eip155:8453"`
        for Base; use `"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp"` for Solana.

        - `type` — Optional signature type. Use `"ed25519"` for Solana. Omitted
        means EVM/EIP-191 for backward compatibility.


        **EVM SIWE message fields:**

        - `domain`: `api.venice.ai`

        - `uri`: `https://api.venice.ai`

        - `version`: `"1"`

        - `chainId`: `8453`

        - `nonce`: Random 16-character hex string

        - `issuedAt` / `expirationTime`: ISO timestamps (recommended TTL: 10
        minutes)

        - `statement`: `"Sign in to Venice API"`


        **Example (TypeScript):**

        ```

        import { Wallet } from 'ethers'

        import { SiweMessage } from 'siwe'


        const wallet = new Wallet(PRIVATE_KEY)

        const msg = new SiweMessage({ domain: 'api.venice.ai', address:
        wallet.address, statement: 'Sign in to Venice API', uri:
        'https://api.venice.ai', version: '1', chainId: 8453, nonce:
        crypto.randomUUID().replace(/-/g, '').slice(0, 16), issuedAt: new
        Date().toISOString(), expirationTime: new Date(Date.now() +
        600000).toISOString() })

        const signature = await wallet.signMessage(msg.prepareMessage())

        const header = btoa(JSON.stringify({ address: wallet.address, message:
        msg.prepareMessage(), signature, timestamp: Date.now(), chainId: 8453
        }))

        // Set header: SIGN-IN-WITH-X: <header>

        ```


        **Solana message fields:** The signed message starts with `<domain>
        wants you to sign in with your Solana account:`, followed by the wallet
        address and the standard `URI`, `Version`, `Chain ID`, `Nonce`, `Issued
        At`, and optional `Expiration Time` fields. Use `type: "ed25519"` and
        `chainId: "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp"` in the encoded JSON
        payload.


        **SDK:** `npm install @venice-ai/x402-client` provides `VeniceClient`
        and `createAuthFetch` which handle this automatically.


        **Billing:** x402 users pay from a prepaid USDC credit balance. Top up
        via `POST /x402/top-up`. When balance is insufficient, endpoints return
        `402` with structured top-up instructions.
      in: header
      name: SIGN-IN-WITH-X
      type: apiKey

````