openapi: 3.1.0
info:
  title: Shuffll API
  description: >
    The Shuffll API enables seamless automation and integration of Shuffll’s
    AI-powered video creation platform into external workflows. <br/> <br/> 




    **What is Shuffll?**


    Shuffll is an AI-powered platform designed to automate and streamline video
    content creation for businesses, marketers, and content creators. By
    leveraging machine learning, Shuffll enables users to generate high-quality
    videos efficiently, reducing production time and effort while maintaining
    creative control.


    With **Shuffll’s API**, developers can integrate automated video generation
    into their applications, enabling seamless video content production at
    scale. Whether it’s for marketing, social media, training, or corporate
    communications, Shuffll simplifies the process of creating engaging and
    professional videos.





    <br/> **Key Features**  

    - **AI-Driven Video Creation** – Generate videos automatically based on
    structured input, scripts, or templates.  

    - **Smart Editing & Automation** – Apply transitions, overlays, and effects
    without manual editing.  

    - **Custom API Endpoints** – Programmatically generate, edit, and manage
    video content.  

    - **Brand Consistency** – Ensure that videos align with predefined brand
    styles and messaging.  

    - **Seamless Integrations** – Connect with third-party tools, media
    libraries, and content management systems.  


    Shuffll’s API empowers developers to automate video production, integrate
    AI-enhanced video workflows, and create personalized video content at
    scale—all with minimal effort.
  version: 1.1.1
  termsOfService: https://shuffll.com/terms-of-use/
  contact:
    email: info@shuffll.com
    url: https://shuffll.com
  license:
    name: MIT
    url: https://opensource.org/license/mit/
servers:
  - url: https://dapi.shuffllmedia.com/api/v1
paths:
  /project/create:
    post:
      summary: Create project
      description: >-
        this request will create the innital project includes choosing your AI
        voice, writting your script and creating the storyline of your project.
      operationId: createProject
      tags:
        - Projects
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateProjectRequest'
            examples:
              default_example:
                $ref: '#/components/examples/CreateProjectRequestExample'
      responses:
        '200':
          description: Created.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProjectCreateResponse'
              examples:
                default_example:
                  $ref: '#/components/examples/CreateProjectResponseExample'
        '400':
          $ref: '#/components/responses/BadRequest'
  /project/{projectId}/create/status:
    get:
      summary: Get project
      description: Get details about a special event.
      operationId: getProject
      tags:
        - Templates
      parameters:
        - $ref: '#/components/parameters/ProjectId'
      responses:
        '200':
          description: Succeeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProjectCreateResponse'
              examples:
                default_example:
                  $ref: '#/components/examples/GetProjectCreateResponseExample'
        '400':
          $ref: '#/components/responses/BadRequest'
        '404':
          $ref: '#/components/responses/NotFound'
  /project/{projectId}/status:
    get:
      summary: Get project creation status
      description: Get the status of a project.
      operationId: getProjectStatus
      tags:
        - Projects
      parameters:
        - $ref: '#/components/parameters/ProjectId'
      responses:
        '200':
          description: Succeeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProjectGetStatusResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '404':
          $ref: '#/components/responses/NotFound'
  /project/{projectId}/enhance:
    post:
      summary: Enhance project
      description: Enhance project.
      operationId: enhanceLastProject
      tags:
        - Enhance
      parameters:
        - $ref: '#/components/parameters/ProjectId'
      responses:
        '200':
          description: Succeeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProjectEnhanceResponse'
              examples:
                default_example:
                  $ref: '#/components/examples/ProjectEnhanceResponseExample'
        '400':
          $ref: '#/components/responses/BadRequest'
        '404':
          $ref: '#/components/responses/NotFound'
  /project/{projectId}/enhance/status:
    get:
      summary: Get project enhance status
      description: Get the status of an enhancement.
      operationId: getEnhanceProject
      tags:
        - Enhance
      parameters:
        - $ref: '#/components/parameters/ProjectId'
      responses:
        '200':
          description: Succeeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProjectStatusEnhanceStatusResponse'
              examples:
                default_example:
                  $ref: >-
                    #/components/examples/ProjectStatusEnhanceStatusResponseExample
        '202':
          description: Succeeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProjectStatusEnhanceStatusResponse'
              examples:
                default_example:
                  $ref: >-
                    #/components/examples/ProjectStatusEnhanceStatusStillInProccessResponseExample
        '400':
          $ref: '#/components/responses/BadRequest'
        '404':
          $ref: '#/components/responses/NotFound'
  /project/{projectId}/export:
    post:
      summary: Export project
      description: Export project.
      operationId: exportProject
      tags:
        - Export
      parameters:
        - $ref: '#/components/parameters/ProjectId'
      responses:
        '200':
          description: Succeeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProjectEnhanceResponse'
              examples:
                default_example:
                  $ref: '#/components/examples/ProjectEnhanceResponseExample'
        '400':
          $ref: '#/components/responses/BadRequest'
        '404':
          $ref: '#/components/responses/NotFound'
  /project/{projectId}/export/status:
    get:
      summary: Get project export status
      description: Get the status of a export.
      operationId: getExportProject
      tags:
        - Export
      parameters:
        - $ref: '#/components/parameters/ProjectId'
      responses:
        '200':
          description: Succeeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProjectExportStatusResponse'
              examples:
                default_example:
                  $ref: '#/components/examples/ProjectExportDoneResponse'
        '202':
          description: Succeeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProjectExportStatusResponse'
              examples:
                default_example:
                  $ref: '#/components/examples/ProjectExportStillInProcessResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '404':
          $ref: '#/components/responses/NotFound'
components:
  schemas:
    Succeeded:
      description: Is Succeeded
      type: boolean
      example: true
    Percentages:
      description: Percentages
      type: number
      example: 100
    isDone:
      description: Is Done
      type: boolean
      example: true
    Urls:
      description: Urls
      type: object
      properties:
        uploadPath:
          $ref: '#/components/schemas/UploadPath'
        dashPath:
          $ref: '#/components/schemas/DashPath'
    ProjectId:
      description: Identifier for a project.
      type: string
      format: uuid
      example: 3be6453c-03eb-4357-ae5a-984a0e574a54
    EditId:
      description: Identifier for an edit.
      type: string
      format: uuid
      example: 3be6453c-03eb-4357-ae5a-984a0e574a54
    Prompt:
      type: string
      description: Prompt of the project.
      example: Riot games in 2025
    TemplateId:
      type: string
      description: ID of a template to create project from.
      example: '1111'
    VideoTagId:
      type: string
      description: General description of the video.
      example: Explainer / Marketing / ssssssasdasdadasda.
    ProjectStatus:
      type: string
      description: Options for the value - STRUCTURE | GENERATING_IMAGES | DONE
      example: DONE
    UploadPath:
      type: string
      description: Upload Path
      example: https://content.shuffll.com...mp4
    DashPath:
      type: string
      description: Dash Path
      example: https://content.shuffll.com...mpd
    CreateProjectRequest:
      description: Request payload for creating new special events at the museum.
      type: object
      properties:
        prompt:
          $ref: '#/components/schemas/Prompt'
        templateId:
          $ref: '#/components/schemas/TemplateId'
        videoTagId:
          $ref: '#/components/schemas/VideoTagId'
      required:
        - prompt
    ProjectGetStatusResponse:
      description: Get project creation status.
      type: object
      properties:
        status:
          $ref: '#/components/schemas/ProjectStatus'
    ProjectCreateResponse:
      description: Information about a special event.
      type: object
      properties:
        projectId:
          $ref: '#/components/schemas/ProjectId'
      required:
        - projectId
    ProjectEnhanceResponse:
      description: Enhance Project.
      type: object
      properties:
        succeeded:
          $ref: '#/components/schemas/Succeeded'
      required:
        - succeeded
    ProjectStatusEnhanceStatusResponse:
      description: Enhance Status.
      type: object
      properties:
        percentages:
          $ref: '#/components/schemas/Percentages'
        isDone:
          $ref: '#/components/schemas/isDone'
      required:
        - percentages
        - isDone
    ProjectExportStatusResponse:
      description: Export Status.
      type: object
      properties:
        isDone:
          $ref: '#/components/schemas/isDone'
          urls:
            $ref: '#/components/schemas/Urls'
      required:
        - isDone
        - urls
    Error:
      type: object
      properties:
        type:
          type: string
          example: object
        title:
          type: string
          example: Validation failed
        message:
          type: string
          example: Bad Request
  securitySchemes:
    ShuffllApiBasicAuth:
      type: apiKey
      in: header
      name: >-
        sfl-cfaea992f81f933adb1ff191c7012f2a6b9a1c687f772690798bf3089d65e8ef.ab8c854acf3a9f22fcab0de6b97dabde:da922f22d8099a45030ad50f571a390e5468e902b93f1b4a5ddaf0c0d8fb4a6f
  examples:
    CreateProjectRequestExample:
      summary: Create special event
      value:
        prompt: Breaking the Agency Mold - Building Long-Term Partnerships with Data
        templateId: 67682e831de738f85b0d0fc9
        videoTagId: Marketing
    CreateProjectResponseExample:
      summary: Special event created
      value:
        projectId: '123123123'
    GetProjectCreateResponseExample:
      summary: Get special event
      value:
        projectId: 6744a0da-4121-49cd-8479-f8cc20526495
    ProjectEnhanceResponseExample:
      summary: Project enhance response
      value:
        succeeded: true
    ProjectStatusEnhanceStatusResponseExample:
      summary: Enhance status completed response
      value:
        percentages: 100
        isDone: true
    ProjectStatusEnhanceStatusStillInProccessResponseExample:
      summary: Enhance status in proccess response
      value:
        percentages: 50
        isDone: false
    ProjectExportStillInProcessResponse:
      summary: Enhance export is in proccess response
      value:
        urls: {}
        isDone: false
    ProjectExportDoneResponse:
      summary: Project export is done response
      value:
        urls:
          uploadPath: hi1
          dashPath: hi2
        isDone: true
    ListProjectResponseExample:
      summary: List of special events
      value:
        - projectId: f3e0e76e-e4a8-466e-ab9c-ae36c15b8e97
          editId: 2f14374a-9c65-4ee5-94b7-fba66d893483
        - projectId: 6aaa61ba-b2aa-4868-b803-603dbbf7bfdb
          editId: 602b75e1-5696-4ab8-8c7a-f9e13580f910
  parameters:
    ProjectId:
      name: projectId
      in: path
      description: Identifier for a specific project.
      required: true
      schema:
        type: string
        format: uuid
        example: dad4bce8-f5cb-4078-a211-995864315e39
  responses:
    BadRequest:
      description: Bad request.
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/Error'
    NotFound:
      description: Not found.
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/Error'
    Unauthorized:
      description: Unauthorized.
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/Error'
