{
  "openapi": "3.0.0",
  "info": {
    "title": "LoopBack 4 Application",
    "version": "1.0.0",
    "description": "Global boilerplate for LB4 simulation",
    "contact": {
      "name": "Kurt Matthew",
      "email": "skurtmatthew02@gmail.com"
    }
  },
  "paths": {
    "/assets/webhook": {
      "post": {
        "x-controller-name": "WebhookController",
        "x-operation-name": "assetWebhook",
        "tags": [
          "WebhookController"
        ],
        "responses": {
          "200": {
            "description": "Return value of WebhookController.assetWebhook"
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "operationId": "WebhookController.assetWebhook"
      }
    },
    "/assets/{id}/generate-image": {
      "post": {
        "x-controller-name": "AssetController",
        "x-operation-name": "generateAssetImage",
        "tags": [
          "AssetController"
        ],
        "responses": {
          "200": {
            "description": "Return value of AssetController.generateAssetImage"
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "operationId": "AssetController.generateAssetImage"
      }
    },
    "/assets/{id}/upload-image": {
      "post": {
        "x-controller-name": "AssetController",
        "x-operation-name": "uploadImage",
        "tags": [
          "AssetController"
        ],
        "responses": {
          "200": {
            "description": "Asset image uploaded"
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "operationId": "AssetController.uploadImage"
      }
    },
    "/assets/{id}": {
      "patch": {
        "x-controller-name": "AssetController",
        "x-operation-name": "update",
        "tags": [
          "AssetController"
        ],
        "responses": {
          "200": {
            "description": "Return value of AssetController.update"
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "AssetController.update"
      },
      "delete": {
        "x-controller-name": "AssetController",
        "x-operation-name": "deleteAsset",
        "tags": [
          "AssetController"
        ],
        "responses": {
          "200": {
            "description": "Return value of AssetController.deleteAsset"
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "operationId": "AssetController.deleteAsset"
      }
    },
    "/canvas-plans/{id}": {
      "put": {
        "x-controller-name": "ChapterController",
        "x-operation-name": "updatePlan",
        "tags": [
          "ChapterController"
        ],
        "responses": {
          "200": {
            "description": "Return value of ChapterController.updatePlan"
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "ChapterController.updatePlan"
      }
    },
    "/chapters/{id}/canvas-plans": {
      "get": {
        "x-controller-name": "ChapterController",
        "x-operation-name": "getPlans",
        "tags": [
          "ChapterController"
        ],
        "responses": {
          "200": {
            "description": "Return value of ChapterController.getPlans"
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "operationId": "ChapterController.getPlans"
      }
    },
    "/chapters/{id}/chat-edit-plan": {
      "post": {
        "x-controller-name": "GenerationController",
        "x-operation-name": "chatEditPlan",
        "tags": [
          "GenerationController"
        ],
        "responses": {
          "200": {
            "description": "Return value of GenerationController.chatEditPlan"
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "GenerationController.chatEditPlan"
      }
    },
    "/chapters/{id}/extract-assets": {
      "post": {
        "x-controller-name": "GenerationController",
        "x-operation-name": "extractAssets",
        "tags": [
          "GenerationController"
        ],
        "responses": {
          "200": {
            "description": "Return value of GenerationController.extractAssets"
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "operationId": "GenerationController.extractAssets"
      }
    },
    "/chapters/{id}/generate-assets": {
      "post": {
        "x-controller-name": "GenerationController",
        "x-operation-name": "generateAssets",
        "tags": [
          "GenerationController"
        ],
        "responses": {
          "200": {
            "description": "Return value of GenerationController.generateAssets"
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "operationId": "GenerationController.generateAssets"
      }
    },
    "/chapters/{id}/generate-sequence-plan": {
      "post": {
        "x-controller-name": "GenerationController",
        "x-operation-name": "generateCanvasPlan",
        "tags": [
          "GenerationController"
        ],
        "responses": {
          "200": {
            "description": "Return value of GenerationController.generateCanvasPlan"
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "operationId": "GenerationController.generateCanvasPlan"
      }
    },
    "/chapters/{chapterId}/panels/reorder": {
      "post": {
        "x-controller-name": "PanelController",
        "x-operation-name": "reorderPanels",
        "tags": [
          "PanelController"
        ],
        "responses": {
          "200": {
            "description": "Return value of PanelController.reorderPanels"
          }
        },
        "parameters": [
          {
            "name": "chapterId",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "PanelController.reorderPanels"
      }
    },
    "/chapters/{chapterId}/panels": {
      "post": {
        "x-controller-name": "PanelController",
        "x-operation-name": "addPanel",
        "tags": [
          "PanelController"
        ],
        "responses": {
          "200": {
            "description": "Return value of PanelController.addPanel"
          }
        },
        "parameters": [
          {
            "name": "chapterId",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "PanelController.addPanel"
      }
    },
    "/chapters/{id}/panels": {
      "get": {
        "x-controller-name": "ChapterController",
        "x-operation-name": "getPanels",
        "tags": [
          "ChapterController"
        ],
        "responses": {
          "200": {
            "description": "Return value of ChapterController.getPanels"
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "operationId": "ChapterController.getPanels"
      }
    },
    "/chapters/{id}/pause": {
      "post": {
        "x-controller-name": "GenerationController",
        "x-operation-name": "pauseGeneration",
        "tags": [
          "GenerationController"
        ],
        "responses": {
          "200": {
            "description": "Return value of GenerationController.pauseGeneration"
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "operationId": "GenerationController.pauseGeneration"
      }
    },
    "/chapters/{id}/resume": {
      "post": {
        "x-controller-name": "GenerationController",
        "x-operation-name": "resumeGeneration",
        "tags": [
          "GenerationController"
        ],
        "responses": {
          "200": {
            "description": "Return value of GenerationController.resumeGeneration"
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "GenerationController.resumeGeneration"
      }
    },
    "/chapters/{id}/revert": {
      "post": {
        "x-controller-name": "GenerationController",
        "x-operation-name": "revertChapter",
        "tags": [
          "GenerationController"
        ],
        "responses": {
          "200": {
            "description": "Return value of GenerationController.revertChapter"
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "GenerationController.revertChapter"
      }
    },
    "/chapters/{id}/start-panels": {
      "post": {
        "x-controller-name": "GenerationController",
        "x-operation-name": "startPanels",
        "tags": [
          "GenerationController"
        ],
        "responses": {
          "200": {
            "description": "Return value of GenerationController.startPanels"
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "GenerationController.startPanels"
      }
    },
    "/chapters/{id}": {
      "patch": {
        "x-controller-name": "ChapterController",
        "x-operation-name": "update",
        "tags": [
          "ChapterController"
        ],
        "responses": {
          "200": {
            "description": "Return value of ChapterController.update"
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "ChapterController.update"
      },
      "delete": {
        "x-controller-name": "ChapterController",
        "x-operation-name": "deleteById",
        "tags": [
          "ChapterController"
        ],
        "responses": {
          "200": {
            "description": "Return value of ChapterController.deleteById"
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "operationId": "ChapterController.deleteById"
      }
    },
    "/panels/edit": {
      "post": {
        "x-controller-name": "GenerationController",
        "x-operation-name": "editPanel",
        "tags": [
          "GenerationController"
        ],
        "responses": {
          "200": {
            "description": "Return value of GenerationController.editPanel"
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "operationId": "GenerationController.editPanel"
      }
    },
    "/panels/generate-sfx": {
      "post": {
        "x-controller-name": "GenerationController",
        "x-operation-name": "generateSfx",
        "tags": [
          "GenerationController"
        ],
        "responses": {
          "200": {
            "description": "Return value of GenerationController.generateSfx"
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "operationId": "GenerationController.generateSfx"
      }
    },
    "/panels/webhook": {
      "post": {
        "x-controller-name": "WebhookController",
        "x-operation-name": "panelWebhook",
        "tags": [
          "WebhookController"
        ],
        "responses": {
          "200": {
            "description": "Return value of WebhookController.panelWebhook"
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "operationId": "WebhookController.panelWebhook"
      }
    },
    "/panels/{id}": {
      "patch": {
        "x-controller-name": "PanelController",
        "x-operation-name": "updatePanel",
        "tags": [
          "PanelController"
        ],
        "responses": {
          "200": {
            "description": "Return value of PanelController.updatePanel"
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "PanelController.updatePanel"
      },
      "delete": {
        "x-controller-name": "PanelController",
        "x-operation-name": "deletePanel",
        "tags": [
          "PanelController"
        ],
        "responses": {
          "200": {
            "description": "Return value of PanelController.deletePanel"
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "operationId": "PanelController.deletePanel"
      }
    },
    "/projects/{projectId}/assets": {
      "get": {
        "x-controller-name": "AssetController",
        "x-operation-name": "find",
        "tags": [
          "AssetController"
        ],
        "responses": {
          "200": {
            "description": "Return value of AssetController.find"
          }
        },
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "operationId": "AssetController.find"
      }
    },
    "/projects/{projectId}/bulk-generate": {
      "post": {
        "x-controller-name": "GenerationController",
        "x-operation-name": "startBulkGenerate",
        "tags": [
          "GenerationController"
        ],
        "responses": {
          "200": {
            "description": "Return value of GenerationController.startBulkGenerate"
          }
        },
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "GenerationController.startBulkGenerate"
      }
    },
    "/projects/{projectId}/cancel-bulk": {
      "post": {
        "x-controller-name": "GenerationController",
        "x-operation-name": "cancelBulkGenerate",
        "tags": [
          "GenerationController"
        ],
        "responses": {
          "200": {
            "description": "Return value of GenerationController.cancelBulkGenerate"
          }
        },
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "operationId": "GenerationController.cancelBulkGenerate"
      }
    },
    "/projects/{projectId}/chapters/bulk": {
      "post": {
        "x-controller-name": "ChapterController",
        "x-operation-name": "createBulk",
        "tags": [
          "ChapterController"
        ],
        "responses": {
          "200": {
            "description": "Return value of ChapterController.createBulk"
          }
        },
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "array"
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "ChapterController.createBulk"
      }
    },
    "/projects/{projectId}/chapters": {
      "post": {
        "x-controller-name": "ChapterController",
        "x-operation-name": "create",
        "tags": [
          "ChapterController"
        ],
        "responses": {
          "200": {
            "description": "Return value of ChapterController.create"
          }
        },
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "ChapterController.create"
      },
      "get": {
        "x-controller-name": "ChapterController",
        "x-operation-name": "find",
        "tags": [
          "ChapterController"
        ],
        "responses": {
          "200": {
            "description": "Return value of ChapterController.find"
          }
        },
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "operationId": "ChapterController.find"
      }
    },
    "/projects/{projectId}/chat-asset": {
      "post": {
        "x-controller-name": "AssetController",
        "x-operation-name": "chatToAsset",
        "tags": [
          "AssetController"
        ],
        "responses": {
          "200": {
            "description": "Return value of AssetController.chatToAsset"
          }
        },
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "AssetController.chatToAsset"
      }
    },
    "/projects/{id}": {
      "get": {
        "x-controller-name": "ProjectController",
        "x-operation-name": "findById",
        "tags": [
          "ProjectController"
        ],
        "responses": {
          "200": {
            "description": "Return value of ProjectController.findById"
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "operationId": "ProjectController.findById"
      },
      "delete": {
        "x-controller-name": "ProjectController",
        "x-operation-name": "deleteById",
        "tags": [
          "ProjectController"
        ],
        "responses": {
          "200": {
            "description": "Return value of ProjectController.deleteById"
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "operationId": "ProjectController.deleteById"
      }
    },
    "/projects": {
      "post": {
        "x-controller-name": "ProjectController",
        "x-operation-name": "create",
        "tags": [
          "ProjectController"
        ],
        "responses": {
          "200": {
            "description": "Return value of ProjectController.create"
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "operationId": "ProjectController.create"
      },
      "get": {
        "x-controller-name": "ProjectController",
        "x-operation-name": "find",
        "tags": [
          "ProjectController"
        ],
        "responses": {
          "200": {
            "description": "Return value of ProjectController.find"
          }
        },
        "operationId": "ProjectController.find"
      }
    },
    "/share/chapter/{id}": {
      "get": {
        "x-controller-name": "ShareController",
        "x-operation-name": "getSharedChapter",
        "tags": [
          "ShareController"
        ],
        "responses": {
          "200": {
            "description": "Return value of ShareController.getSharedChapter"
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "operationId": "ShareController.getSharedChapter"
      }
    },
    "/share/project/{id}": {
      "get": {
        "x-controller-name": "ShareController",
        "x-operation-name": "getSharedProject",
        "tags": [
          "ShareController"
        ],
        "responses": {
          "200": {
            "description": "Return value of ShareController.getSharedProject"
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "operationId": "ShareController.getSharedProject"
      }
    },
    "/upload-image": {
      "post": {
        "x-controller-name": "AssetController",
        "x-operation-name": "uploadGenericImage",
        "tags": [
          "AssetController"
        ],
        "responses": {
          "200": {
            "description": "Generic image uploaded"
          }
        },
        "operationId": "AssetController.uploadGenericImage"
      }
    },
    "/users/login": {
      "post": {
        "x-controller-name": "UserController",
        "x-operation-name": "login",
        "tags": [
          "UserController"
        ],
        "responses": {
          "200": {
            "description": "Return value of UserController.login"
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "operationId": "UserController.login"
      }
    },
    "/users/me/buy-credits": {
      "post": {
        "x-controller-name": "UserController",
        "x-operation-name": "buyCredits",
        "tags": [
          "UserController"
        ],
        "responses": {
          "200": {
            "description": "Return value of UserController.buyCredits"
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "operationId": "UserController.buyCredits"
      }
    },
    "/users/me/subscribe": {
      "post": {
        "x-controller-name": "UserController",
        "x-operation-name": "subscribe",
        "tags": [
          "UserController"
        ],
        "responses": {
          "200": {
            "description": "Return value of UserController.subscribe"
          }
        },
        "operationId": "UserController.subscribe"
      }
    },
    "/users/me": {
      "get": {
        "x-controller-name": "UserController",
        "x-operation-name": "me",
        "tags": [
          "UserController"
        ],
        "responses": {
          "200": {
            "description": "Return value of UserController.me"
          }
        },
        "operationId": "UserController.me"
      }
    },
    "/users/register": {
      "post": {
        "x-controller-name": "UserController",
        "x-operation-name": "register",
        "tags": [
          "UserController"
        ],
        "responses": {
          "200": {
            "description": "Return value of UserController.register"
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/User"
              }
            }
          }
        },
        "operationId": "UserController.register"
      }
    }
  },
  "components": {
    "securitySchemes": {
      "jwt": {
        "type": "http",
        "scheme": "bearer",
        "bearerFormat": "JWT"
      }
    },
    "schemas": {
      "User": {
        "title": "User",
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "email": {
            "type": "string"
          },
          "password": {
            "type": "string"
          },
          "firstName": {
            "type": "string"
          },
          "credits": {
            "type": "number"
          },
          "inkBalance": {
            "type": "number"
          },
          "subscriptionTier": {
            "type": "string"
          }
        },
        "required": [
          "email",
          "password"
        ],
        "additionalProperties": true
      }
    }
  },
  "security": [
    {
      "jwt": []
    }
  ],
  "servers": [
    {
      "url": "http://app.api.narramix.com"
    }
  ]
}