CraftStory Craftstory 2 API

The craftstory-2 API from CraftStory — 10 operation(s) for craftstory-2.

GitHub OpenAPI

Operations 12

GET /craftstory-2/ CraftStory 2.0 — a talking video of any length from one photo and an audio clip… #
POST /craftstory-2/ Start a CraftStory 2.0 generation #
GET /craftstory-2/avatars/ List the caller's custom avatars usable as ``avatar_id`` #
GET /craftstory-2/avatars/{avatar_pk}/scenes/ List the scenes of one custom avatar visible to the caller #
POST /craftstory-2/preview-cost/ Craftstory 2 preview cost #
GET /craftstory-2/user-voices/ List your cloned (custom) voices that are ready to use #
GET /craftstory-2/voices/ List built-in library voices #
GET /craftstory-2/{id}/ CraftStory 2.0 — a talking video of any length from one photo and an audio clip… #
DELETE /craftstory-2/{id}/ CraftStory 2.0 — a talking video of any length from one photo and an audio clip… #
POST /craftstory-2/{id}/asset/ CraftStory 2.0 — a talking video of any length from one photo and an audio clip… #
GET /craftstory-2/{id}/status/ CraftStory 2.0 — a talking video of any length from one photo and an audio clip… #
POST /craftstory-2/{id}/upscale/ Craftstory 2 make upscale #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/craftstory-com:craftstory-com-craftstory-2-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

craftstory-com-craftstory-2-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Craftstory Com Craftstory 2 API
  version: 1.0.0
  description: 'Operations tagged craftstory-2 across 2 of this provider''s published API definitions: craftstory-com-swagger.json, craftstory-com-openapi.yml. Each path carries the servers of the definition it was published in.'
servers:
- url: https://api.craftstory.com/api/v1
security:
- ApiKey: []
tags:
- name: craftstory-2
paths:
  /craftstory-2/:
    parameters: []
    get:
      operationId: craftstory-2_list
      summary: CraftStory 2.0 — a talking video of any length from one photo and an audio clip…
      description: 'Create with ``POST``, poll ``GET /craftstory-2/{id}/status/`` until

        ``done``, then read ``video`` from ``GET /craftstory-2/{id}/``.

        Voices, cloned voices and custom avatars are listed under this prefix.'
      parameters:
      - name: ordering
        in: query
        description: 'Sort by any of the following fields: created, updated. Prefix with ''-'' for descending order.'
        schema:
          type: string
      - name: id__in
        in: query
        description: Filter by id__in
        schema:
          type: string
      - name: name
        in: query
        description: Filter by name
        schema:
          type: string
      - name: name__istartswith
        in: query
        description: Filter by name__istartswith
        schema:
          type: string
      - name: status
        in: query
        description: Filter by status
        schema:
          type: string
      - name: status__in
        in: query
        description: Filter by status__in
        schema:
          type: string
      - name: created__gte
        in: query
        description: Filter by created__gte
        schema:
          type: string
          format: date
      - name: created__lte
        in: query
        description: Filter by created__lte
        schema:
          type: string
          format: date
      - name: created__range
        in: query
        description: Filter by created__range
        schema:
          type: string
          format: date
      - name: updated__gte
        in: query
        description: Filter by updated__gte
        schema:
          type: string
          format: date
      - name: updated__lte
        in: query
        description: Filter by updated__lte
        schema:
          type: string
          format: date
      - name: updated__range
        in: query
        description: Filter by updated__range
        schema:
          type: string
          format: date
      - name: resolution
        in: query
        description: Filter by resolution
        schema:
          type: string
      - name: gestures
        in: query
        description: Filter by gestures
        schema:
          type: string
      - name: lipsync_mode
        in: query
        description: Filter by lipsync_mode
        schema:
          type: string
      - name: search
        in: query
        description: A search term.
        required: false
        schema:
          type: string
      - name: limit
        in: query
        description: Number of results to return per page.
        required: false
        schema:
          type: integer
      - name: offset
        in: query
        description: The initial index from which to return the results.
        required: false
        schema:
          type: integer
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CraftStory2'
      tags:
      - craftstory-2
    post:
      operationId: craftstory-2_create
      summary: Start a CraftStory 2.0 generation
      description: 'Multipart or JSON. ``image`` (file or URL) or ``scene_id`` selects the

        driving photo; ``audios`` (ids from ``/audio/clips/``) sets the speech

        and the length. Credits are charged up front and refunded on failure.'
      responses:
        '201':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CraftStory2'
      tags:
      - craftstory-2
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CraftStory2Create'
        required: true
    servers:
    - url: https://api.craftstory.com/api/v1
  /craftstory-2/avatars/:
    parameters: []
    get:
      operationId: craftstory-2_avatars
      summary: List the caller's custom avatars usable as ``avatar_id``
      description: 'Returns avatars visible to the user (system + owned-ready + shared-ready)

        that have a trained model — exactly the set accepted on create. Pass an

        ``id`` from here as ``avatar_id`` in ``POST /api/v1/craftstory-2/`` to

        generate with that custom avatar.'
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/AvatarPublic'
      tags:
      - craftstory-2
    servers:
    - url: https://api.craftstory.com/api/v1
  /craftstory-2/avatars/{avatar_pk}/scenes/:
    parameters:
    - name: avatar_pk
      in: path
      required: true
      schema:
        type: string
    get:
      operationId: craftstory-2_avatars_avatar_scenes
      summary: List the scenes of one custom avatar visible to the caller
      description: 'Use a scene ``id`` from here as ``scene_id`` in

        ``POST /api/v1/craftstory-2/`` — an alternative to uploading an

        ``image``. ``image_url`` is a signed preview link.

        Returns 404 if the avatar is not visible to the caller.'
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/AvatarScenePublic'
      tags:
      - craftstory-2
    servers:
    - url: https://api.craftstory.com/api/v1
  /craftstory-2/preview-cost/:
    parameters: []
    post:
      operationId: craftstory-2_preview_cost
      description: Return the expected credit cost without creating a task.
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CraftStory2PreviewCostResponse'
      tags:
      - craftstory-2
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CraftStory2PreviewCost'
        required: true
      summary: Craftstory 2 preview cost
      x-summary-source: derived
    servers:
    - url: https://api.craftstory.com/api/v1
  /craftstory-2/user-voices/:
    parameters: []
    get:
      operationId: craftstory-2_user_voices
      summary: List your cloned (custom) voices that are ready to use
      description: 'Pass a voice ``id`` from here as ``voice_user_id`` on

        ``POST /api/v1/audio/clips/`` to generate audio in that voice.'
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/UserVoicePublic'
      tags:
      - craftstory-2
    servers:
    - url: https://api.craftstory.com/api/v1
  /craftstory-2/voices/:
    parameters: []
    get:
      operationId: craftstory-2_voices
      summary: List built-in library voices
      description: 'Pass a voice ``id`` from here as ``voice_id`` on

        ``POST /api/v1/audio/clips/`` to generate audio in that voice.'
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/LibraryVoicePublic'
      tags:
      - craftstory-2
    servers:
    - url: https://api.craftstory.com/api/v1
  /craftstory-2/{id}/:
    parameters:
    - name: id
      in: path
      required: true
      schema:
        type: string
    get:
      operationId: craftstory-2_read
      summary: CraftStory 2.0 — a talking video of any length from one photo and an audio clip…
      description: 'Create with ``POST``, poll ``GET /craftstory-2/{id}/status/`` until

        ``done``, then read ``video`` from ``GET /craftstory-2/{id}/``.

        Voices, cloned voices and custom avatars are listed under this prefix.'
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CraftStory2'
      tags:
      - craftstory-2
    delete:
      operationId: craftstory-2_delete
      summary: CraftStory 2.0 — a talking video of any length from one photo and an audio clip…
      description: 'Create with ``POST``, poll ``GET /craftstory-2/{id}/status/`` until

        ``done``, then read ``video`` from ``GET /craftstory-2/{id}/``.

        Voices, cloned voices and custom avatars are listed under this prefix.'
      responses:
        '204':
          description: ''
      tags:
      - craftstory-2
    servers:
    - url: https://api.craftstory.com/api/v1
  /craftstory-2/{id}/asset/:
    parameters:
    - name: id
      in: path
      required: true
      schema:
        type: string
    post:
      operationId: craftstory-2_create_asset
      summary: CraftStory 2.0 — a talking video of any length from one photo and an audio clip…
      description: 'Create with ``POST``, poll ``GET /craftstory-2/{id}/status/`` until

        ``done``, then read ``video`` from ``GET /craftstory-2/{id}/``.

        Voices, cloned voices and custom avatars are listed under this prefix.'
      responses:
        '201':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AssetListRetrieve'
      tags:
      - craftstory-2
    servers:
    - url: https://api.craftstory.com/api/v1
  /craftstory-2/{id}/status/:
    parameters:
    - name: id
      in: path
      required: true
      schema:
        type: string
    get:
      operationId: craftstory-2_get_status
      summary: CraftStory 2.0 — a talking video of any length from one photo and an audio clip…
      description: 'Create with ``POST``, poll ``GET /craftstory-2/{id}/status/`` until

        ``done``, then read ``video`` from ``GET /craftstory-2/{id}/``.

        Voices, cloned voices and custom avatars are listed under this prefix.'
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CraftStory2Status'
      tags:
      - craftstory-2
    servers:
    - url: https://api.craftstory.com/api/v1
  /craftstory-2/{id}/upscale/:
    parameters:
    - name: id
      in: path
      required: true
      schema:
        type: string
    post:
      operationId: craftstory-2_make_upscale
      description: Upscale a finished video to 1080p as a new record (0.2 credits/s).
      responses:
        '201':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CraftStory2'
      tags:
      - craftstory-2
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CraftStory2Upscale'
        required: true
      summary: Craftstory 2 make upscale
      x-summary-source: derived
    servers:
    - url: https://api.craftstory.com/api/v1
components:
  schemas:
    CraftStory2PreviewCost:
      required:
      - audios
      - resolution
      type: object
      properties:
        audios:
          type: array
          items:
            type: string
            format: uuid
          uniqueItems: true
        resolution:
          title: Resolution
          type: string
          enum:
          - '480_832'
          - '832_480'
          - '720_1280'
          - '1280_720'
          - '768_960'
        lipsync_mode:
          title: Lipsync mode
          description: 'Lipsync engine: sync_so (default, same price), craftstory (built-in), empty (off).'
          type: string
          enum:
          - craftstory
          - sync_so
          - empty
          default: sync_so
    UserVoicePublic:
      type: object
      properties:
        id:
          title: Id
          type: string
          format: uuid
          readOnly: true
        name:
          title: Name
          type: string
          maxLength: 256
        language:
          title: Language
          type:
          - string
          - 'null'
          readOnly: true
        gender:
          title: Gender
          type:
          - string
          - 'null'
          enum:
          - male
          - female
          - null
        age:
          title: Age
          type:
          - string
          - 'null'
          enum:
          - child
          - young_adult
          - middle_adult
          - old
          - null
        example:
          title: Example
          type:
          - string
          - 'null'
          readOnly: true
    CraftStory2Status:
      type: object
      properties:
        status:
          title: Status
          type: string
          enum:
          - created
          - in_progress_converting_image20_to_png
          - in_progress_audio
          - in_progress_10_video_queued
          - in_progress_10_video_generating
          - in_progress_20_video_queued
          - in_progress_moderation_image
          - in_progress_20_video_generating
          - in_progress_upscaling_queued
          - in_progress_upscaling_generating
          - failed
          - done
          - rejected_image
        status_failed:
          title: Status failed
          type:
          - string
          - 'null'
          enum:
          - video10_generating
          - convert_image20_to_png
          - failed_image_moderation
          - rejected_image
          - failed_join_audios
          - video20_first_frame
          - no_person_detected_image
          - no_person_detected_video
          - multiple_people_detected_image
          - no_face_detected_image
          - failed_image
          - failed_video
          - gpu_unavailable
          - failed_outpaint
          - failed_lipsync
          - null
        status_failed_display:
          title: Status failed display
          type: string
          readOnly: true
        status_percentage:
          title: Status percentage
          type: integer
          maximum: 32767
          minimum: 0
        credits_refunded:
          title: Credits refunded
          type: string
          readOnly: true
    CraftStory2Upscale:
      required:
      - resolution
      type: object
      properties:
        resolution:
          title: Resolution
          description: 1080_1920 for a 720_1280 source, 1920_1080 for a 1280_720 source, 1152_1440 for a 768_960 source.
          type: string
          enum:
          - '1080_1920'
          - '1920_1080'
          - '1152_1440'
        credits:
          title: Credits
          type: integer
          readOnly: true
    AvatarScenePublic:
      type: object
      properties:
        id:
          title: Id
          type: string
          format: uuid
          readOnly: true
        image_url:
          title: Image url
          type:
          - string
          - 'null'
          readOnly: true
    AssetListRetrieveProject:
      required:
      - name
      type: object
      properties:
        id:
          title: Id
          type: string
          format: uuid
          readOnly: true
        name:
          title: Name
          type: string
          maxLength: 512
          minLength: 1
    CraftStory2Create:
      required:
      - audios
      - resolution
      type: object
      properties:
        id:
          title: Id
          type: string
          format: uuid
          readOnly: true
        name:
          title: Name
          type:
          - string
          - 'null'
          maxLength: 512
        image:
          title: Image
          description: 'Driving photo: file upload or URL. Provide image or scene_id (if both, scene_id wins).'
          type: string
          readOnly: true
          format: uri
        scene_id:
          title: Scene id
          description: Avatar scene id (from GET /craftstory-2/avatars/{id}/scenes/); its image becomes the driving frame. Provide scene_id or image (if both, scene_id wins).
          type:
          - string
          - 'null'
          format: uuid
        audios:
          type: array
          items:
            type: string
            format: uuid
          uniqueItems: true
        gestures:
          title: Gestures
          description: 'How much the avatar moves: normal (default), calm, expressive.'
          type: string
          enum:
          - normal
          - calm
          - expressive
          default: normal
        resolution:
          title: Resolution
          description: 'Output size WIDTH_HEIGHT: 9:16 / 16:9 at 480p or 720p, or 768_960 for 4:5 portrait (audio under 30 minutes). A 1.5x upscale is available via /upscale/ afterwards.'
          type: string
          enum:
          - '480_832'
          - '832_480'
          - '720_1280'
          - '1280_720'
          - '768_960'
        lipsync_mode:
          title: Lipsync mode
          description: 'Lipsync engine: sync_so (default, same price), craftstory (built-in), empty (off).'
          type: string
          enum:
          - craftstory
          - sync_so
          - empty
          default: sync_so
        user_prompt:
          title: User prompt
          description: Optional motion / scene hint in free text (gestures, expressions, camera).
          type: string
          maxLength: 1000
        avatar_id:
          title: Avatar id
          description: Optional custom avatar id (from GET /craftstory-2/avatars/); its trained model drives identity.
          type:
          - string
          - 'null'
          format: uuid
        faceswap:
          title: Faceswap
          description: Optional — defaults to true (recommended). With avatar_id the default flips to false (the trained avatar already carries identity); an explicit value is honoured either way.
          type: boolean
          default: true
        credits:
          title: Credits
          type: integer
          readOnly: true
    LibraryVoicePublic:
      required:
      - name
      type: object
      properties:
        id:
          title: Id
          type: string
          format: uuid
          readOnly: true
        name:
          title: Name
          type: string
          maxLength: 256
          minLength: 1
        language:
          title: Language
          type:
          - string
          - 'null'
          readOnly: true
        gender:
          title: Gender
          type:
          - string
          - 'null'
          enum:
          - male
          - female
          - null
        age:
          title: Age
          type:
          - string
          - 'null'
          enum:
          - child
          - young_adult
          - middle_adult
          - old
          - null
        labels:
          type: array
          items:
            type: string
          readOnly: true
        example:
          title: Example
          type:
          - string
          - 'null'
          readOnly: true
    CraftStory2:
      type: object
      properties:
        id:
          title: Id
          type: string
          format: uuid
          readOnly: true
        name:
          title: Name
          type:
          - string
          - 'null'
          readOnly: true
          minLength: 1
        kind:
          title: Kind
          type: string
          enum:
          - regular
          - upscale
          - clone
          - studio
          readOnly: true
        status:
          title: Status
          type: string
          enum:
          - created
          - in_progress_converting_image20_to_png
          - in_progress_audio
          - in_progress_10_video_queued
          - in_progress_10_video_generating
          - in_progress_20_video_queued
          - in_progress_moderation_image
          - in_progress_20_video_generating
          - in_progress_upscaling_queued
          - in_progress_upscaling_generating
          - failed
          - done
          - rejected_image
          readOnly: true
        status_failed:
          title: Status failed
          type:
          - string
          - 'null'
          enum:
          - video10_generating
          - convert_image20_to_png
          - failed_image_moderation
          - rejected_image
          - failed_join_audios
          - video20_first_frame
          - no_person_detected_image
          - no_person_detected_video
          - multiple_people_detected_image
          - no_face_detected_image
          - failed_image
          - failed_video
          - gpu_unavailable
          - failed_outpaint
          - failed_lipsync
          - null
          readOnly: true
        status_failed_display:
          title: Status failed display
          type: string
          readOnly: true
        status_percentage:
          title: Status percentage
          type: integer
          readOnly: true
        credits_refunded:
          title: Credits refunded
          type: string
          readOnly: true
        audios:
          type: array
          items:
            type: string
            format: uuid
          readOnly: true
          uniqueItems: true
        image:
          title: Image
          type: string
          readOnly: true
          format: uri
        gestures:
          title: Gestures
          type: string
          readOnly: true
          minLength: 1
        resolution:
          title: Resolution
          type: string
          readOnly: true
          minLength: 1
        lipsync_mode:
          title: Lipsync mode
          description: 'Lipsync engine: sync_so (default, same price), craftstory (built-in), empty (off).'
          type: string
          enum:
          - craftstory
          - sync_so
          - empty
          readOnly: true
        user_prompt:
          title: User prompt
          type: string
          readOnly: true
          minLength: 1
        video:
          title: Video
          description: Result MP4; null until status is done.
          type: string
          readOnly: true
          format: uri
        video_duration_s:
          title: Video duration s
          description: Length of the result in seconds; null until done.
          type:
          - number
          - 'null'
          readOnly: true
        video_first_frame:
          title: Video first frame
          type: string
          readOnly: true
          format: uri
        credits:
          title: Credits
          type: integer
          readOnly: true
        asset:
          title: Asset
          type:
          - string
          - 'null'
          format: uuid
          readOnly: true
        created:
          title: Created
          type: string
          format: date-time
          readOnly: true
        updated:
          title: Updated
          type: string
          format: date-time
          readOnly: true
    AvatarPublic:
      required:
      - name
      type: object
      properties:
        id:
          title: Id
          type: string
          format: uuid
          readOnly: true
        name:
          title: Name
          type: string
          maxLength: 128
          minLength: 1
        cover_url:
          title: Cover url
          type:
          - string
          - 'null'
          readOnly: true
        scene_count:
          title: Scene count
          type: integer
          readOnly: true
        voice:
          title: Voice
          type:
          - object
          - 'null'
          readOnly: true
        models:
          type: array
          items:
            type: string
          readOnly: true
    AssetListRetrieve:
      required:
      - project
      - kind
      type: object
      properties:
        id:
          title: Id
          type: string
          format: uuid
          readOnly: true
        project:
          $ref: '#/components/schemas/AssetListRetrieveProject'
        kind:
          title: Kind
          type: string
          enum:
          - audio
          - image
          - video
          - image_ppx
          - image_llm
          - video_llm
          - video_video2video
          - video_image2video
          - video_audio2video
          - video_cloudvideo
          - image_marketing
          - video_marketing
        status:
          title: Status
          type: string
          enum:
          - created
          - pending
          - done
          - failed
          - rejected
        status_display:
          title: Status display
          type: string
          readOnly: true
        moderation_labels:
          title: Moderation labels
          type:
          - object
          - 'null'
        is_approved:
          title: Is approved
          type: boolean
        file:
          title: File
          type:
          - string
          - 'null'
          readOnly: true
          format: uri
        data:
          title: Data
          type:
          - object
          - 'null'
        schema:
          title: Schema
          type:
          - object
          - 'null'
        order:
          title: Order
          type: integer
          maximum: 32767
          minimum: 0
        created:
          title: Created
          type: string
          format: date-time
          readOnly: true
        updated:
          title: Updated
          type: string
          format: date-time
          readOnly: true
        first_frame_1000:
          title: First frame 1000
          type:
          - string
          - 'null'
          readOnly: true
    CraftStory2PreviewCostResponse:
      required:
      - credits
      type: object
      properties:
        credits:
          title: Credits
          type: integer
    CraftStory2PreviewCost_2:
      required:
      - audios
      - resolution
      type: object
      properties:
        audios:
          type: array
          items:
            type: string
            format: uuid
          uniqueItems: true
        resolution:
          title: Resolution
          type: string
          enum:
          - 480832
          - 832480
          - 7201280
          - 1280720
          - 768960
        lipsync_mode:
          title: Lipsync mode
          description: 'Lipsync engine: sync_so (default, same price), craftstory (built-in), empty (off).'
          type: string
          enum:
          - craftstory
          - sync_so
          - empty
          default: sync_so
    CraftStory2Upscale_2:
      required:
      - resolution
      type: object
      properties:
        resolution:
          title: Resolution
          description: 1080_1920 for a 720_1280 source, 1920_1080 for a 1280_720 source, 1152_1440 for a 768_960 source.
          type: string
          enum:
          - 10801920
          - 19201080
          - 11521440
        credits:
          title: Credits
          type: integer
          readOnly: true
    CraftStory2Create_2:
      required:
      - audios
      - resolution
      type: object
      properties:
        id:
          title: Id
          type: string
          format: uuid
          readOnly: true
        name:
          title: Name
          type:
          - string
          - 'null'
          maxLength: 512
        image:
          title: Image
          description: 'Driving photo: file upload or URL. Provide image or scene_id (if both, scene_id wins).'
          type: string
          readOnly: true
          format: uri
        scene_id:
          title: Scene id
          description: Avatar scene id (from GET /craftstory-2/avatars/{id}/scenes/); its image becomes the driving frame. Provide scene_id or image (if both, scene_id wins).
          type:
          - string
          - 'null'
          format: uuid
        audios:
          type: array
          items:
            type: string
            format: uuid
          uniqueItems: true
        gestures:
          title: Gestures
          description: 'How much the avatar moves: normal (default), calm, expressive.'
          type: string
          enum:
          - normal
          - calm
          - expressive
          default: normal
        resolution:
          title: Resolution
          description: 'Output size WIDTH_HEIGHT: 9:16 / 16:9 at 480p or 720p, or 768_960 for 4:5 portrait (audio under 30 minutes). A 1.5x upscale is available via /upscale/ afterwards.'
          type: string
          enum:
          - 480832
          - 832480
          - 7201280
          - 1280720
          - 768960
        lipsync_mode:
          title: Lipsync mode
          description: 'Lipsync engine: sync_so (default, same price), craftstory (built-in), empty (off).'
          type: string
          enum:
          - craftstory
          - sync_so
          - empty
          default: sync_so
        user_prompt:
          title: User prompt
          description: Optional motion / scene hint in free text (gestures, expressions, camera).
          type: string
          maxLength: 1000
        avatar_id:
          title: Avatar id
          description: Optional custom avatar id (from GET /craftstory-2/avatars/); its trained model drives identity.
          type:
          - string
          - 'null'
          format: uuid
        faceswap:
          title: Faceswap
          description: Optional — defaults to true (recommended). With avatar_id the default flips to false (the trained avatar already carries identity); an explicit value is honoured either way.
          type: boolean
          default: true
        credits:
          title: Credits
          type: integer
          readOnly: true
  securitySchemes:
    ApiKey:
      type: apiKey
      name: Authorization
      in: header
      description: Enter 'Bearer sk-cs-...' (your API key from Account → API Access).
x-refined-from:
- craftstory-com-swagger.json
- craftstory-com-openapi.yml