Skip to main content

Sora2 - Characters

Create dynamic character animations powered by Sora-2-characters’ advanced AI model

File Upload Requirements

Before using the Character Animation API, you need to upload your character videos:
1

Upload Character Videos

Visit our File Upload API to upload your character videos.Requirements:
  • File Type: MP4, WebM, or AVI format
  • Duration: Between 1-4 seconds per video
  • Max File Size: 10MB per file
  • Content: Character movements or actions you want to animate
Only one character video can be uploaded per animation task.
2

Get Upload URLs

After successful upload, you’ll receive file URLs that can be used in the character_file_url parameter.
3

Submit Animation Task

Use the obtained URLs in your API request to generate character animations with the new parameters.

Additional Parameters

Besides the character video URL, you can provide additional parameters to enhance your character animation:
  • character_prompt: Description of the character and desired animation style (Max 5000 characters)
  • safety_instruction: Safety guidelines and content restrictions for the animation (Max 5000 characters)
Both parameters are optional but recommended for better control over the animation output.
File Storage Notice: Files uploaded through our File Upload API are stored temporarily for only 14 days. After this period, the character URLs will become invalid and cause errors when using the Character Animation API. We recommend using third-party permanent storage solutions (such as AWS S3, Google Cloud Storage, or other cloud storage services) to ensure long-term availability of your character video files.
Ensure your character videos are between 1-4 seconds long. Videos outside this duration range may cause processing errors.

Query Task Status

After submitting a task, use the unified query endpoint to check progress and retrieve results:

Get Task Details

Learn how to query task status and retrieve generation results

Task Query Response Format

When the task is completed successfully (state: "success"), the resultJson field contains:
{
  "character_id": "example_123456789"
}
The character_id can be used to reference the generated character animation in subsequent operations.
For production use, we recommend using the callBackUrl parameter to receive automatic notifications when generation completes, rather than polling the status endpoint.
Rate limits and quotas are enforced by Apikley and may differ from upstream providers.

OpenAPI

market/sora2/sora-2-characters.json post /api/v1/jobs/createTask
openapi: 3.0.0
info:
  title: Sora-2-characters API
  description: Apikley Sora-2-characters API Documentation - Character Animation
  version: 1.0.0
  contact:
    name: Technical Support
    email: [email protected]
servers:
  - url: https://api.apikley.ru
    description: API Server
security:
  - BearerAuth: []
paths:
  /api/v1/jobs/createTask:
    post:
      summary: Generate character animations using sora-2-characters
      operationId: sora-2-characters
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - model
              properties:
                model:
                  type: string
                  enum:
                    - sora-2-characters
                  default: sora-2-characters
                  description: |-
                    The model name to use for generation. Required field.

                    - Must be `sora-2-characters` for this endpoint
                  example: sora-2-characters
                callBackUrl:
                  type: string
                  format: uri
                  description: >-
                    The URL to receive generation task completion updates.
                    Optional but recommended for production use.


                    - System will POST task status and results to this URL when
                    generation completes

                    - Callback includes generated content URLs and task
                    information

                    - Your callback endpoint should accept POST requests with
                    JSON payload containing results

                    - Alternatively, use the Get Task Details endpoint to poll
                    task status
                  example: https://your-domain.com/api/callback
                input:
                  type: object
                  description: Input parameters for the generation task
                  properties:
                    character_file_url:
                      description: >-
                        Array of character video URLs to use as input for
                        character animation. Only one video URL is allowed. The
                        video must be between 1-4 seconds in duration. (File URL
                        after upload, not file content; Accepted types:
                        video/mp4, video/webm, video/avi; Max size: 10.0MB per
                        file; Duration: 1-4 seconds)
                      type: array
                      items:
                        type: string
                        format: uri
                      minItems: 1
                      maxItems: 1
                      example:
                        - >-
                          https://static.aiquickdraw.com/tools/example/character1.mp4
                    character_prompt:
                      description: >-
                        Description of the character and desired animation style
                        (Max length: 5000 characters)
                      type: string
                      maxLength: 5000
                      example: >-
                        A friendly cartoon character with expressive eyes and
                        fluid movements
                    safety_instruction:
                      description: >-
                        Safety guidelines and content restrictions for the
                        animation (Max length: 5000 characters)
                      type: string
                      maxLength: 5000
                      example: >-
                        Ensure the animation is family-friendly and contains no
                        violent or inappropriate content
                  required:
                    - character_file_url
            example:
              model: sora-2-characters
              callBackUrl: https://your-domain.com/api/callback
              input:
                character_file_url:
                  - https://static.aiquickdraw.com/tools/example/character1.mp4
                character_prompt: >-
                  A friendly cartoon character with expressive eyes and fluid
                  movements
                safety_instruction: >-
                  Ensure the animation is family-friendly and contains no
                  violent or inappropriate content
      responses:
        '200':
          description: Request successful
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/ApiResponse'
                  - type: object
                    properties:
                      data:
                        type: object
                        properties:
                          taskId:
                            type: string
                            description: >-
                              Task ID, can be used with Get Task Details
                              endpoint to query task status
                            example: 7118f712c1f35c9b8bf2ad1af68ad482
              example:
                code: 200
                msg: success
                data:
                  taskId: task_sora-2-characters_1765174270120
        '500':
          $ref: '#/components/responses/Error'
components:
  schemas:
    ApiResponse:
      type: object
      properties:
        code:
          type: integer
          enum:
            - 200
            - 401
            - 402
            - 404
            - 422
            - 429
            - 455
            - 500
            - 501
            - 505
          description: >-
            Response status code


            - **200**: Success - Request has been processed successfully

            - **401**: Unauthorized - Authentication credentials are missing or
            invalid

            - **402**: Insufficient Credits - Account does not have enough
            credits to perform the operation

            - **404**: Not Found - The requested resource or endpoint does not
            exist

            - **422**: Validation Error - The request parameters failed
            validation checks

            - **429**: Rate Limited - Request limit has been exceeded for this
            resource

            - **455**: Service Unavailable - System is currently undergoing
            maintenance

            - **500**: Server Error - An unexpected error occurred while
            processing the request

            - **501**: Generation Failed - Content generation task failed

            - **505**: Feature Disabled - The requested feature is currently
            disabled
        msg:
          type: string
          description: Response message, error description when failed
          example: success
  responses:
    Error:
      description: Server Error
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      bearerFormat: API Key
      description: >-
        All APIs require authentication via Bearer Token.


        Get API Key:

        1. Visit [API Key Management Page](https://app.apikley.ru/keys) to get your
        API Key


        Usage:

        Add to request header:

        Authorization: Bearer APIKLEY_API_KEY


        Note:

        - Keep your API Key secure and do not share it with others

        - If you suspect your API Key has been compromised, reset it immediately
        in the management page


To find navigation and other pages in this documentation, fetch the llms.txt file at: https://docs.apikley.ru/llms.txt