kreatorflow-ai Video API

The Video API from kreatorflow-ai — 4 operation(s) for video.

Operations 4

POST /v1/videos Create a video generation job #
POST /v1/video-edits Create a Seedance 2 source-video edit job with transform, restyle, or extend… #
POST /v1/videos/edit Edit one clip on Wan 3.0 by instruction ("make it night", "replace the car with… #
POST /v1/videos/extend Add new footage before, after or on both sides of one clip on Wan 3.0 (at least… #

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/kreatorflow-ai:kreatorflow-ai-video-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

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

kreatorflow-ai-video-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Kreatorflow Ai Video API
  version: '2026-06-10'
  contact:
    name: KreatorFlow
    url: https://kreatorflow.ai/developers
    email: harry@kreatorflow.ai
  termsOfService: https://kreatorflow.ai/terms
  description: 'Operations tagged Video across 2 of this provider''s published API definitions: developers.kreatorflow.ai-openapi.json, kreatorflow-ai-openapi.json. Each path carries the servers of the definition it was published in.'
servers:
- url: https://kreatorflow.ai
  description: Production
security:
- bearerAuth: []
- apiKeyHeader: []
tags:
- name: Video
paths:
  /v1/videos:
    post:
      operationId: postVideos
      summary: Create a video generation job
      description: 'Create a video generation job. Required scope: videos:create. Rate limit: 20 per 60 seconds per account.'
      tags:
      - Video
      x-required-scope: videos:create
      parameters:
      - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/VideoRequest'
      responses:
        '200':
          description: Success.
          content:
            application/json:
              schema:
                type: object
                required:
                - success
                - data
                properties:
                  success:
                    type: boolean
                    const: true
                  data:
                    $ref: '#/components/schemas/CreateJobResult'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '402':
          $ref: '#/components/responses/InsufficientBalance'
        '403':
          $ref: '#/components/responses/Forbidden'
        '429':
          $ref: '#/components/responses/RateLimited'
    servers:
    - url: https://kreatorflow.ai
      description: Production
  /v1/video-edits:
    post:
      operationId: postVideoEdits
      summary: Create a Seedance 2 source-video edit job with transform, restyle, or extend…
      description: 'Create a Seedance 2 source-video edit job with transform, restyle, or extend mode. Required scope: videos:create. Rate limit: 20 per 60 seconds per account.'
      tags:
      - Video
      x-required-scope: videos:create
      parameters:
      - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/VideoEditRequest'
      responses:
        '200':
          description: Success.
          content:
            application/json:
              schema:
                type: object
                required:
                - success
                - data
                properties:
                  success:
                    type: boolean
                    const: true
                  data:
                    $ref: '#/components/schemas/CreateJobResult'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '402':
          $ref: '#/components/responses/InsufficientBalance'
        '403':
          $ref: '#/components/responses/Forbidden'
        '429':
          $ref: '#/components/responses/RateLimited'
    servers:
    - url: https://kreatorflow.ai
      description: Production
  /v1/videos/edit:
    post:
      operationId: postVideosEdit
      summary: Edit one clip on Wan 3.0 by instruction ("make it night", "replace the car with…
      description: 'Edit one clip on Wan 3.0 by instruction ("make it night", "replace the car with Image 1"), keeping its length. Up to 4 reference images. The clip must be uploaded first with POST /v1/uploads (public URLs are not accepted). Billed on the clip''s seconds plus the output''s, in whole tokens. Required scope: videos:create. Rate limit: 20 per 60 seconds per account.'
      tags:
      - Video
      x-required-scope: videos:create
      parameters:
      - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/VideoToolRequest'
      responses:
        '200':
          description: Success.
          content:
            application/json:
              schema:
                type: object
                required:
                - success
                - data
                properties:
                  success:
                    type: boolean
                    const: true
                  data:
                    $ref: '#/components/schemas/CreateJobResult'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '402':
          $ref: '#/components/responses/InsufficientBalance'
        '403':
          $ref: '#/components/responses/Forbidden'
        '429':
          $ref: '#/components/responses/RateLimited'
    servers:
    - url: https://kreatorflow.ai
      description: Production
  /v1/videos/extend:
    post:
      operationId: postVideosExtend
      summary: Add new footage before, after or on both sides of one clip on Wan 3.0 (at least…
      description: 'Add new footage before, after or on both sides of one clip on Wan 3.0 (at least 2 s added; the clip plus the result stay within 30 s). The clip must be uploaded first with POST /v1/uploads (public URLs are not accepted). Billed on the clip''s seconds plus the output''s, in whole tokens. Required scope: videos:create.'
      tags:
      - Video
      x-required-scope: videos:create
      parameters:
      - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/VideoToolRequest'
      responses:
        '200':
          description: Success.
          content:
            application/json:
              schema:
                type: object
                required:
                - success
                - data
                properties:
                  success:
                    type: boolean
                    const: true
                  data:
                    $ref: '#/components/schemas/CreateJobResult'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '402':
          $ref: '#/components/responses/InsufficientBalance'
        '403':
          $ref: '#/components/responses/Forbidden'
        '429':
          $ref: '#/components/responses/RateLimited'
    servers:
    - url: https://kreatorflow.ai
      description: Production
components:
  responses:
    Forbidden:
      description: 'Not allowed. account_not_active: The developer account is suspended. scope_missing: The key lacks the scope this endpoint needs. paid_account_required: Lip Sync needs a paid account. Nothing was charged.'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    RateLimited:
      description: Too many requests in the window.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
      headers:
        Retry-After:
          schema:
            type: integer
          description: Seconds to wait.
    BadRequest:
      description: 'Invalid request. prompt_required: No prompt (or text for speech) was sent. prompt_too_long: The prompt is over the model''s limit. model_not_found: Unknown model alias. duration_not_supported: The model doesn''t offer that length. aspect_ratio_not_supported: The model doesn''t offer that aspect ratio. resolution_not_supported: The model doesn''t offer that resolution. reference_combination_not_supported: These references can''t be combined, e.g. start/end frames with reference images. upload_invalid: The upload request is missing a field or has a bad type. video_edit_model_not_supported: Video edits need a Seedance 2.0 family model (2.0, Fast or Mini). video_edit_source_required: A video edit needs a source clip. voice_required: Speech needs a voice. audio_reference_too_long: The audio references add up to more than the model accepts in total (15 s on Seedance 2.0, 30 s on 2.5). Nothing was charged. audio_too_short: The voice track is under 4 seconds. Nothing was charged. audio_too_long: The voice track is over 5 minutes. Nothing was charged. audio_unreadable: The audio couldn''t be read. Nothing was charged.'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    InsufficientBalance:
      description: 'Not enough tokens for the quoted cost; top up and retry. insufficient_balance: Not enough tokens for the quoted cost.'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Unauthorized:
      description: 'Missing, wrong or revoked API key. invalid_api_key: The key is missing, wrong or revoked.'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
      headers:
        WWW-Authenticate:
          schema:
            type: string
          description: Bearer challenge (on /v1/mcp).
  schemas:
    VideoToolRequest:
      type: object
      properties:
        model:
          type: string
          description: string optional; kreator-video-wan-3-prime or kreator-video-wan-3 (when enabled for your account)
        source:
          type: string
          description: 'required; the clip: an upload_id from POST /v1/uploads (upload_type VIDEO), asset:<id>, generation:<id>, a kreatorflow.ai media link or an @handle. Public URLs are not accepted: upload the clip with POST /v1/uploads first. video / source_video / video_upload_id also accepted. MP4 or MOV, up to 15 s'
        instruction:
          type: string
          description: 'edit: required, what to change (up to 1500 characters); extend: optional, what happens in the new part. prompt / text also accepted. Name references as Image 1, Video 2, Audio 1 or by @handle'
        references:
          type: array
          items:
            $ref: '#/components/schemas/Reference'
          description: array optional; extra images, clips or audio in the same forms as source (uploaded with POST /v1/uploads, not public URLs), in prompt order after the clip
        direction:
          type: string
          description: 'extend only: after (default), before or both'
        add_seconds:
          type: string
          description: 'extend only: seconds to add, at least 2; the clip plus the result stay within 30 s'
        resolution:
          type: string
          description: 720p (default) or 1080p; anything else is refused with 400 resolution_not_supported before anything is reserved
        aspect_ratio:
          type: string
          description: 'optional; 16:9, 9:16, 1:1, 4:3, 3:4 or 21:9 (default: keep the clip''s shape); anything else is refused with 400 aspect_ratio_not_supported'
        seed:
          type: integer
          description: integer optional
        webhook_url:
          type: string
          format: uri
          description: https url optional; receives terminal job callbacks
        idempotency_key:
          type: string
          description: string optional body fallback; prefer Idempotency-Key header
      required:
      - source
      additionalProperties: true
    Reference:
      type: object
      properties:
        type:
          type: string
          enum:
          - image_url
          - video_url
          - audio_url
        url:
          type: string
          description: public https url
        upload_id:
          type: string
          description: workspace-scoped upload_id returned by POST /v1/uploads
        role:
          type: string
          description: optional content role such as first_frame, last_frame, reference_image, reference_video, reference_audio
      additionalProperties: true
    ContentItem:
      type: object
      properties:
        type:
          type: string
          enum:
          - text
          - image_url
          - video_url
          - audio_url
        text:
          type: string
          description: string when type=text
        image_url:
          type: string
          format: uri
          description: https url string or object with url or upload_id when type=image_url
        video_url:
          type: string
          format: uri
          description: https url string or object with url or upload_id when type=video_url
        audio_url:
          type: string
          format: uri
          description: https url string or object with url or upload_id when type=audio_url
        role:
          type: string
          description: optional role for reference content
      additionalProperties: true
    Error:
      type: object
      required:
      - success
      - code
      - error
      properties:
        success:
          type: boolean
          const: false
        code:
          type: string
          description: Machine-readable error code.
          enum:
          - account_not_active
          - aspect_ratio_not_supported
          - audio_reference_too_long
          - audio_too_long
          - audio_too_short
          - audio_unreadable
          - audio_upload_not_found
          - character_not_found
          - character_pending
          - character_reference_limit_exceeded
          - character_reference_unusable
          - character_reference_upload_required
          - character_registration_failed
          - character_trusted_asset_failed
          - dispatch_disabled
          - duration_not_supported
          - face_consent_required
          - generation_dispatch_failed
          - generation_dispatch_missing
          - generation_failed
          - generation_output_missing
          - generation_poll_failed
          - generation_rejected
          - generation_timeout
          - generation_unavailable
          - image_rejected
          - image_upload_not_found
          - insufficient_balance
          - internal_error
          - invalid_api_key
          - job_not_found
          - model_not_found
          - paid_account_required
          - paid_check_unavailable
          - prompt_required
          - prompt_too_long
          - rate_limited
          - reference_asset_failed
          - reference_asset_pending
          - reference_combination_not_supported
          - reference_rejected
          - reference_upload_invalid
          - reference_upload_not_found
          - reference_upload_unusable
          - resolution_not_supported
          - response_format_not_supported
          - schema_missing
          - scope_missing
          - storage_not_configured
          - upload_id_invalid
          - upload_in_use
          - upload_invalid
          - upload_not_found
          - upload_state_error
          - upload_too_large
          - video_edit_model_not_supported
          - video_edit_source_must_be_video
          - video_edit_source_not_found
          - video_edit_source_required
          - voice_not_found
          - voice_required
        error:
          type: string
          description: Human-readable message.
      additionalProperties: true
    CreateJobResult:
      type: object
      properties:
        job:
          type: string
          description: accepted job object; image/character dispatch can continue asynchronously, while video create attempts KreatorFlow dispatch before returning
        balance_tokens:
          type: number
          description: number current developer token balance after reservation or replay
        quoted_token_cost:
          type: number
          description: number token quote for the submitted request
        estimated_token_cost:
          type: number
          description: number compatibility alias for quoted_token_cost
        idempotent_replay:
          type: boolean
          description: boolean optional; true when the same Idempotency-Key returned an existing job instead of creating or dispatching another one
      additionalProperties: true
    VideoRequest:
      type: object
      properties:
        model:
          type: string
          description: string optional, defaults to kreator-video-fast; defaults to kreator-video-pro when intent=video_edit
        intent:
          type: string
          description: string optional; set to video_edit for source-video edit mode on /v1/videos
        edit_mode:
          type: string
          description: transform, restyle, or extend when intent=video_edit; editMode alias accepted
        source_video_upload_id:
          type: string
          description: preferred owned same-workspace VIDEO upload_id for source-video edit mode; create it with upload_type VIDEO; MP4/MOV with H.264/AAC under 50 MB recommended; sourceVideoUploadId alias accepted
        video:
          type: string
          description: public HTTPS source video URL alias for source-video edit mode; source_video_url/sourceVideoUrl also accepted
        source_video_url:
          type: string
          description: public HTTPS source video URL alias for source-video edit mode
        source_model_key:
          type: string
          description: optional compatibility hint for previous Seedance 2 sources; omit for newly uploaded source clips
        prompt:
          type: string
          description: string required unless content includes a text item
        content:
          type: array
          items:
            $ref: '#/components/schemas/ContentItem'
          description: KreatorFlow content array optional
        duration:
          type: number
          description: number optional, rounded up and validated against model limits
        aspect_ratio:
          type: string
          description: string optional; source-video edit defaults to adaptive when omitted
        ratio:
          type: string
          description: alias for aspect_ratio; source-video edit accepts adaptive
        resolution:
          type: string
          description: string optional
        generate_audio:
          type: boolean
          description: boolean optional
        watermark:
          type: boolean
          description: boolean optional, defaults to false
        seed:
          type: integer
          description: integer optional
        camera_fixed:
          type: boolean
          description: boolean optional
        references:
          type: array
          items:
            $ref: '#/components/schemas/Reference'
          description: array optional; supports url or upload_id
        first_frame_upload_id:
          type: string
          description: image upload_id for the first frame; firstFrameUploadId and first_frame_image_upload_id aliases accepted
        last_frame_upload_id:
          type: string
          description: image upload_id for the last frame; lastFrameUploadId and last_frame_image_upload_id aliases accepted
        first_frame_url:
          type: string
          description: public HTTPS image URL for the first frame; firstFrameUrl and first_frame_image_url aliases accepted
        last_frame_url:
          type: string
          description: public HTTPS image URL for the last frame; lastFrameUrl and last_frame_image_url aliases accepted
        reference_upload_ids:
          type: array
          items:
            type: string
          description: array optional; image upload_id values
        reference_image_upload_ids:
          type: array
          items:
            type: string
          description: array optional; image upload_id values
        reference_image_urls:
          type: array
          items:
            type: string
          description: array optional; public HTTPS image URLs; reference_images/referenceImages also accepted
        reference_video_upload_ids:
          type: array
          items:
            type: string
          description: array optional; video upload_id values for normal generation clip guidance; source-video edit should use source_video_upload_id
        reference_video_urls:
          type: array
          items:
            type: string
          description: array optional; public HTTPS video URLs for normal generation clip guidance; reference_videos/referenceVideos also accepted
        reference_audio_upload_ids:
          type: array
          items:
            type: string
          description: array optional; audio upload_id values
        reference_audio_urls:
          type: array
          items:
            type: string
          description: array optional; public HTTPS audio URLs; reference_audios/referenceAudios also accepted
        character_ids:
          type: array
          items:
            type: string
          description: array optional; reusable character ids/slugs from POST /v1/characters mode=register
        video_role:
          type: string
          description: 'string optional, reference (default) or edit, on models whose notes list reference clips: reference uses the clips for style, motion or subject; edit changes the one clip by the prompt and keeps its length and shape'
        keep_clip_sound:
          type: boolean
          description: boolean optional, defaults to true; with video_role edit, keeps the clip's own sound on models that can drop it
        shots:
          type: array
          items:
            type: object
            required:
            - duration
            - prompt
            properties:
              duration:
                type: integer
              prompt:
                type: string
          description: 'array optional of { duration, prompt } objects, on models whose notes list a shot list: 2 to 6 shots whose durations add up to duration; prompt then becomes an optional lead-in'
        voice_ids:
          type: array
          items:
            type: string
          description: array optional; cloned voice ids from GET /v1/voices (cloned:<id>), on models whose notes list voices of their own, named @voice_1.. in the prompt
        character_voices:
          type: object
          additionalProperties: true
          description: 'object optional, { character_id: voice id }, on models whose notes list cloned voices: the character (also in character_ids) speaks with that cloned voice'
        face_consent:
          type: boolean
          description: boolean; required (true) when a reference video is combined with image references (a face onto a person); same rules as on POST /v1/video-edits
        video_reference_mode:
          type: string
          description: fallback or strict optional; defaults to fallback for normal generation; source-video edit forces strict
        safety_identifier:
          type: string
          description: string optional, max 64 chars
        webhook_url:
          type: string
          format: uri
          description: https url optional; receives terminal job callbacks
        callback_url:
          type: string
          description: alias for webhook_url
        idempotency_key:
          type: string
          description: string optional body fallback; prefer Idempotency-Key header
      additionalProperties: true
    VideoEditRequest:
      type: object
      properties:
        model:
          type: string
          description: string optional, defaults to kreator-video-pro; must be a Seedance 2 video alias
        edit_mode:
          type: string
          description: required transform, restyle, or extend; editMode alias accepted
        source_video_upload_id:
          type: string
          description: preferred owned same-workspace VIDEO upload_id from POST /v1/uploads with upload_type VIDEO; image/audio upload ids are rejected before billing; MP4/MOV with H.264/AAC under 50 MB recommended; sourceVideoUploadId alias accepted
        video:
          type: string
          description: public HTTPS source video URL alias; source_video_url/sourceVideoUrl also accepted and normalized through KreatorFlow video storage
        source_video_url:
          type: string
          description: public HTTPS source video URL alias for source-video edit mode
        source_model_key:
          type: string
          description: optional compatibility hint for previous Seedance 2 sources; omit for newly uploaded source clips
        prompt:
          type: string
          description: string required edit instruction for transform/restyle; optional for extend (a default continuation is used)
        face_consent:
          type: boolean
          description: 'boolean; required (true) when image references are sent with the source video (a face onto a person): your confirmation that you are the person in the image or have their permission. Recorded with the job. Face edits also need a paid account and pass a nudity/minor check on the images before anything is charged'
        duration:
          type: number
          description: number optional, rounded up and validated against model limits
        aspect_ratio:
          type: string
          description: string optional; defaults to adaptive to preserve source-video framing
        ratio:
          type: string
          description: alias for aspect_ratio; adaptive preserves source-video framing
        resolution:
          type: string
          description: string optional
        generate_audio:
          type: boolean
          description: boolean optional
        character_ids:
          type: array
          items:
            type: string
          description: array optional; reusable character ids/slugs from POST /v1/characters mode=register; used as owned/authorized appearance guidance on source-video edits; celebrity, public-figure, deepfake, and impersonation wording is rejected
        reference_upload_ids:
          type: array
          items:
            type: string
          description: array optional; extra image upload_id values for authorized appearance, style, wardrobe, product, or composition guidance
        reference_image_upload_ids:
          type: array
          items:
            type: string
          description: array optional; extra image upload_id values for authorized appearance, style, wardrobe, product, or composition guidance
        reference_image_urls:
          type: array
          items:
            type: string
          description: array optional; extra public HTTPS image URLs for authorized appearance, style, wardrobe, product, or composition guidance; reference_images/referenceImages also accepted
        reference_video_upload_ids:
          type: array
          items:
            type: string
          description: array optional; extra clip guidance; source_video_upload_id or video/source_video_url is always strict and required
        reference_audios:
          type: array
          items:
            type: string
          description: array optional; public HTTPS audio reference URLs; equivalent to reference_audio_urls
        safety_identifier:
          type: string
          description: string optional, max 64 chars
        webhook_url:
          type: string
          format: uri
          description: https url optional; receives terminal job callbacks
        callback_url:
          type: string
          description: alias for webhook_url
        idempotency_key:
          type: string
          description: string optional body fallback; prefer Idempotency-Key header
      required:
      - edit_mode
      additionalProperties: true
  parameters:
    IdempotencyKey:
      name: Idempotency-Key
      in: header
      required: false
      schema:
        type: string
        maxLength: 255
      description: Send the same key when retrying a create and you get the original job back instead of a second one.
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: Your KreatorFlow API key (kf_...) as a bearer token. Keep it on your server.
    apiKeyHeader:
      type: apiKey
      in: header
      name: x-api-key
      description: Alternative to the Authorization header.
externalDocs:
  description: Developer docs
  url: https://developers.kreatorflow.ai/?section=docs
x-refined-from:
- developers.kreatorflow.ai-openapi.json
- kreatorflow-ai-openapi.json
x-job-error-codes:
- code: reference_rejected
  meaning: A reference did not pass screening.
- code: reference_asset_pending
  meaning: A new reference is still being reviewed.
- code: reference_asset_failed
  meaning: The reference did not pass review.
- code: generation_rejected
  meaning: The request was declined (prompt, reference or options).
- code: generation_timeout
  meaning: The job ran out of time after automatic retries.
- code: generation_unavailable
  meaning: The model is temporarily unavailable.
- code: generation_failed
  meaning: The generation failed.