{
  "openapi": "3.1.0",
  "info": {
    "title": "Presenton Self-hosted API",
    "version": "v0.9.3-beta",
    "description": "Supported public API served by a self-hosted Presenton deployment."
  },
  "paths": {
    "/api/v1/ppt/files/upload": {
      "post": {
        "tags": [
          "Files"
        ],
        "summary": "Upload source files",
        "operationId": "upload_files_api_v1_ppt_files_upload_post",
        "requestBody": {
          "content": {
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/Body_upload_files_api_v1_ppt_files_upload_post"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "type": "string"
                  },
                  "type": "array",
                  "title": "Response Upload Files Api V1 Ppt Files Upload Post"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/ServerError"
          }
        },
        "description": "Upload supported source files and return identifiers that can be used in self-hosted generation requests.\n\n[Read the files and content guide](/user-guide/api-and-automation/files-and-content).",
        "security": [
          {
            "BasicAuth": []
          }
        ],
        "externalDocs": {
          "description": "Read the files and content guide",
          "url": "/user-guide/api-and-automation/files-and-content"
        }
      }
    },
    "/api/v1/ppt/images/uploaded": {
      "get": {
        "tags": [
          "Images"
        ],
        "summary": "List uploaded images",
        "operationId": "get_uploaded_images_api_v1_ppt_images_uploaded_get",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "500": {
            "$ref": "#/components/responses/ServerError"
          }
        },
        "description": "List images stored by this Presenton instance.\n\n[Read the files and content guide](/user-guide/api-and-automation/files-and-content).",
        "security": [
          {
            "BasicAuth": []
          }
        ],
        "externalDocs": {
          "description": "Read the files and content guide",
          "url": "/user-guide/api-and-automation/files-and-content"
        }
      }
    },
    "/api/v1/ppt/images/upload": {
      "post": {
        "tags": [
          "Images"
        ],
        "summary": "Upload an image",
        "operationId": "upload_image_api_v1_ppt_images_upload_post",
        "requestBody": {
          "content": {
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/Body_upload_image_api_v1_ppt_images_upload_post"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/ServerError"
          }
        },
        "description": "Upload an image to this Presenton instance.\n\n[Read the files and content guide](/user-guide/api-and-automation/files-and-content).",
        "security": [
          {
            "BasicAuth": []
          }
        ],
        "externalDocs": {
          "description": "Read the files and content guide",
          "url": "/user-guide/api-and-automation/files-and-content"
        }
      }
    },
    "/api/v1/ppt/images/{id}": {
      "delete": {
        "tags": [
          "Images"
        ],
        "summary": "Delete an uploaded image",
        "operationId": "delete_uploaded_image_by_id_api_v1_ppt_images__id__delete",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "Id"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/ServerError"
          }
        },
        "description": "Delete one uploaded image from this Presenton instance.\n\n[Read the files and content guide](/user-guide/api-and-automation/files-and-content).",
        "security": [
          {
            "BasicAuth": []
          }
        ],
        "externalDocs": {
          "description": "Read the files and content guide",
          "url": "/user-guide/api-and-automation/files-and-content"
        }
      }
    },
    "/api/v1/ppt/presentation/all": {
      "get": {
        "tags": [
          "Presentation"
        ],
        "summary": "List presentations",
        "operationId": "get_all_presentations_api_v1_ppt_presentation_all_get",
        "parameters": [
          {
            "name": "version",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "$ref": "#/components/schemas/PresentationVersion"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Only include presentations matching this version.",
              "title": "Version"
            },
            "description": "Only include presentations matching this version."
          },
          {
            "name": "include_slides",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean",
              "description": "Include the first slide for dashboard previews. Disable this for metadata-only presentation lists.",
              "default": true,
              "title": "Include Slides"
            },
            "description": "Include the first slide for dashboard previews. Disable this for metadata-only presentation lists."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/PresentationWithSlides"
                  },
                  "title": "Response Get All Presentations Api V1 Ppt Presentation All Get"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/ServerError"
          }
        },
        "description": "List presentations stored by this Presenton instance.\n\n[Read the presentation workflow guide](/api-guides/presentation-generation-flows).",
        "security": [
          {
            "BasicAuth": []
          }
        ],
        "externalDocs": {
          "description": "Read the presentation workflow guide",
          "url": "/api-guides/presentation-generation-flows"
        }
      }
    },
    "/api/v1/ppt/presentation/{id}": {
      "get": {
        "tags": [
          "Presentation"
        ],
        "summary": "Get a presentation",
        "operationId": "get_presentation_api_v1_ppt_presentation__id__get",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PresentationWithSlides"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/ServerError"
          }
        },
        "description": "Return one presentation and its slides.\n\n[Read the presentation workflow guide](/api-guides/presentation-generation-flows).",
        "security": [
          {
            "BasicAuth": []
          }
        ],
        "externalDocs": {
          "description": "Read the presentation workflow guide",
          "url": "/api-guides/presentation-generation-flows"
        }
      },
      "delete": {
        "tags": [
          "Presentation"
        ],
        "summary": "Delete a presentation",
        "operationId": "delete_presentation_api_v1_ppt_presentation__id__delete",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "Id"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/ServerError"
          }
        },
        "description": "Permanently delete one presentation from this instance.\n\n[Read the presentation workflow guide](/api-guides/presentation-generation-flows).",
        "security": [
          {
            "BasicAuth": []
          }
        ],
        "externalDocs": {
          "description": "Read the presentation workflow guide",
          "url": "/api-guides/presentation-generation-flows"
        }
      }
    },
    "/api/v1/ppt/presentation/generate": {
      "post": {
        "tags": [
          "Presentation"
        ],
        "summary": "Generate a presentation synchronously",
        "operationId": "generate_presentation_sync_api_v1_ppt_presentation_generate_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GeneratePresentationRequest"
              },
              "example": {
                "content": "A concise introduction to renewable energy",
                "n_slides": 6,
                "language": "English",
                "export_as": "pptx"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PresentationPathAndEditPath"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/ServerError"
          }
        },
        "description": "Create and export a presentation before returning the final presentation paths.\n\n[Read the presentation workflow guide](/api-guides/presentation-generation-flows).",
        "security": [
          {
            "BasicAuth": []
          }
        ],
        "externalDocs": {
          "description": "Read the presentation workflow guide",
          "url": "/api-guides/presentation-generation-flows"
        }
      }
    },
    "/api/v1/ppt/presentation/generate/async": {
      "post": {
        "tags": [
          "Presentation"
        ],
        "summary": "Generate a presentation asynchronously",
        "operationId": "generate_presentation_async_api_v1_ppt_presentation_generate_async_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GeneratePresentationRequest"
              },
              "example": {
                "content": "A concise introduction to renewable energy",
                "n_slides": 6,
                "language": "English",
                "export_as": "pptx"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AsyncTaskModel"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/ServerError"
          }
        },
        "description": "Create a background generation task and return immediately with its task identifier.\n\n[Read the presentation workflow guide](/api-guides/presentation-generation-flows).",
        "security": [
          {
            "BasicAuth": []
          }
        ],
        "externalDocs": {
          "description": "Read the presentation workflow guide",
          "url": "/api-guides/presentation-generation-flows"
        }
      }
    },
    "/api/v1/ppt/presentation/status/{id}": {
      "get": {
        "tags": [
          "Presentation"
        ],
        "summary": "Get generation status",
        "operationId": "check_async_presentation_generation_status_api_v1_ppt_presentation_status__id__get",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "description": "ID of the presentation generation task",
              "title": "Id"
            },
            "description": "ID of the presentation generation task"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AsyncTaskModel"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/ServerError"
          }
        },
        "description": "Return the state and result or error data for an asynchronous presentation task.\n\n[Read the async and webhooks guide](/user-guide/api-and-automation/async-and-webhooks).",
        "security": [
          {
            "BasicAuth": []
          }
        ],
        "externalDocs": {
          "description": "Read the async and webhooks guide",
          "url": "/user-guide/api-and-automation/async-and-webhooks"
        }
      }
    },
    "/api/v1/ppt/presentation/edit": {
      "post": {
        "tags": [
          "Presentation"
        ],
        "summary": "Edit a presentation",
        "operationId": "edit_presentation_with_new_content_api_v1_ppt_presentation_edit_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EditPresentationRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PresentationPathAndEditPath"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/ServerError"
          }
        },
        "description": "Apply new content to an existing presentation and return the updated result.\n\n[Read the presentation workflow guide](/api-guides/presentation-generation-flows).",
        "security": [
          {
            "BasicAuth": []
          }
        ],
        "externalDocs": {
          "description": "Read the presentation workflow guide",
          "url": "/api-guides/presentation-generation-flows"
        }
      }
    },
    "/api/v1/ppt/presentation/derive": {
      "post": {
        "tags": [
          "Presentation"
        ],
        "summary": "Derive a presentation",
        "operationId": "derive_presentation_from_existing_one_api_v1_ppt_presentation_derive_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EditPresentationRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PresentationPathAndEditPath"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/ServerError"
          }
        },
        "description": "Create a modified presentation while preserving the original.\n\n[Read the presentation workflow guide](/api-guides/presentation-generation-flows).",
        "security": [
          {
            "BasicAuth": []
          }
        ],
        "externalDocs": {
          "description": "Read the presentation workflow guide",
          "url": "/api-guides/presentation-generation-flows"
        }
      }
    },
    "/api/v1/ppt/slide/edit": {
      "post": {
        "tags": [
          "Slide"
        ],
        "summary": "Edit a slide",
        "operationId": "edit_slide_api_v1_ppt_slide_edit_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Body_edit_slide_api_v1_ppt_slide_edit_post"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/ServerError"
          }
        },
        "description": "Apply an AI-assisted edit to one stored slide.\n\n[Read the presentation workflow guide](/api-guides/presentation-generation-flows).",
        "security": [
          {
            "BasicAuth": []
          }
        ],
        "externalDocs": {
          "description": "Read the presentation workflow guide",
          "url": "/api-guides/presentation-generation-flows"
        }
      }
    },
    "/api/v1/webhook/subscribe": {
      "post": {
        "tags": [
          "Webhook"
        ],
        "summary": "Subscribe a webhook",
        "operationId": "subscribe_to_webhook_api_v1_webhook_subscribe_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SubscribeToWebhookRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SubscribeToWebhookResponse"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/ServerError"
          }
        },
        "description": "Subscribe an endpoint to supported events from this Presenton instance.\n\n[Read the async and webhooks guide](/user-guide/api-and-automation/async-and-webhooks).",
        "security": [
          {
            "BasicAuth": []
          }
        ],
        "externalDocs": {
          "description": "Read the async and webhooks guide",
          "url": "/user-guide/api-and-automation/async-and-webhooks"
        }
      }
    },
    "/api/v1/webhook/unsubscribe": {
      "delete": {
        "tags": [
          "Webhook"
        ],
        "summary": "Unsubscribe a webhook",
        "operationId": "unsubscribe_to_webhook_api_v1_webhook_unsubscribe_delete",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Body_unsubscribe_to_webhook_api_v1_webhook_unsubscribe_delete"
              }
            }
          },
          "required": true
        },
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/ServerError"
          }
        },
        "description": "Remove one webhook subscription from this Presenton instance.\n\n[Read the async and webhooks guide](/user-guide/api-and-automation/async-and-webhooks).",
        "security": [
          {
            "BasicAuth": []
          }
        ],
        "externalDocs": {
          "description": "Read the async and webhooks guide",
          "url": "/user-guide/api-and-automation/async-and-webhooks"
        }
      }
    }
  },
  "components": {
    "schemas": {
      "AsyncTaskModel": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "type": {
            "type": "string",
            "title": "Type"
          },
          "status": {
            "$ref": "#/components/schemas/AsyncTaskStatus"
          },
          "message": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Message"
          },
          "error": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Error"
          },
          "data": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Data"
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "title": "Created At"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time",
            "title": "Updated At"
          }
        },
        "type": "object",
        "required": [
          "type",
          "status",
          "created_at",
          "updated_at"
        ],
        "title": "AsyncTaskModel"
      },
      "AsyncTaskStatus": {
        "type": "string",
        "enum": [
          "pending",
          "completed",
          "error"
        ],
        "title": "AsyncTaskStatus"
      },
      "Body_edit_slide_api_v1_ppt_slide_edit_post": {
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid",
            "title": "Id"
          },
          "prompt": {
            "type": "string",
            "title": "Prompt"
          }
        },
        "type": "object",
        "required": [
          "id",
          "prompt"
        ],
        "title": "Body_edit_slide_api_v1_ppt_slide_edit_post"
      },
      "Body_unsubscribe_to_webhook_api_v1_webhook_unsubscribe_delete": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id",
            "description": "The ID of the webhook subscription to unsubscribe from"
          }
        },
        "type": "object",
        "required": [
          "id"
        ],
        "title": "Body_unsubscribe_to_webhook_api_v1_webhook_unsubscribe_delete"
      },
      "Body_upload_files_api_v1_ppt_files_upload_post": {
        "properties": {
          "files": {
            "anyOf": [
              {
                "items": {
                  "type": "string",
                  "contentMediaType": "application/octet-stream"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Files"
          }
        },
        "type": "object",
        "required": [
          "files"
        ],
        "title": "Body_upload_files_api_v1_ppt_files_upload_post"
      },
      "Body_upload_image_api_v1_ppt_images_upload_post": {
        "properties": {
          "file": {
            "type": "string",
            "contentMediaType": "application/octet-stream",
            "title": "File"
          }
        },
        "type": "object",
        "required": [
          "file"
        ],
        "title": "Body_upload_image_api_v1_ppt_images_upload_post"
      },
      "EditPresentationRequest": {
        "properties": {
          "presentation_id": {
            "type": "string",
            "format": "uuid",
            "title": "Presentation Id"
          },
          "slides": {
            "items": {
              "$ref": "#/components/schemas/SlideContentUpdate"
            },
            "type": "array",
            "title": "Slides"
          },
          "export_as": {
            "type": "string",
            "enum": [
              "pptx",
              "pdf"
            ],
            "title": "Export As",
            "default": "pptx"
          }
        },
        "type": "object",
        "required": [
          "presentation_id",
          "slides"
        ],
        "title": "EditPresentationRequest"
      },
      "GeneratePresentationRequest": {
        "properties": {
          "content": {
            "type": "string",
            "title": "Content",
            "description": "The content for generating the presentation"
          },
          "slides_markdown": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Slides Markdown",
            "description": "The markdown for the slides"
          },
          "instructions": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Instructions",
            "description": "The instruction for generating the presentation"
          },
          "tone": {
            "$ref": "#/components/schemas/Tone",
            "description": "The tone to use for the text",
            "default": "default"
          },
          "verbosity": {
            "$ref": "#/components/schemas/Verbosity",
            "description": "How verbose the presentation should be",
            "default": "standard"
          },
          "web_search": {
            "type": "boolean",
            "title": "Web Search",
            "description": "Whether to enable web search",
            "default": false
          },
          "n_slides": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "N Slides",
            "description": "Number of slides to generate. If omitted, model auto-detects slide count."
          },
          "language": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Language",
            "description": "Language for the presentation. If omitted, model auto-detects language."
          },
          "template": {
            "type": "string",
            "title": "Template",
            "description": "Template to use for the presentation",
            "default": "general"
          },
          "include_table_of_contents": {
            "type": "boolean",
            "title": "Include Table Of Contents",
            "description": "Whether to include a table of contents",
            "default": false
          },
          "include_title_slide": {
            "type": "boolean",
            "title": "Include Title Slide",
            "description": "Whether to include a title slide",
            "default": true
          },
          "files": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Files",
            "description": "Files to use for the presentation"
          },
          "export_as": {
            "type": "string",
            "enum": [
              "pptx",
              "pdf"
            ],
            "title": "Export As",
            "description": "Export format",
            "default": "pptx"
          },
          "trigger_webhook": {
            "type": "boolean",
            "title": "Trigger Webhook",
            "description": "Whether to trigger subscribed webhooks",
            "default": false
          }
        },
        "type": "object",
        "required": [
          "content"
        ],
        "title": "GeneratePresentationRequest"
      },
      "HTTPValidationError": {
        "properties": {
          "detail": {
            "items": {
              "$ref": "#/components/schemas/ValidationError"
            },
            "type": "array",
            "title": "Detail"
          }
        },
        "type": "object",
        "title": "HTTPValidationError"
      },
      "PresentationPathAndEditPath": {
        "properties": {
          "presentation_id": {
            "type": "string",
            "format": "uuid",
            "title": "Presentation Id"
          },
          "path": {
            "type": "string",
            "title": "Path"
          },
          "edit_path": {
            "type": "string",
            "title": "Edit Path"
          }
        },
        "type": "object",
        "required": [
          "presentation_id",
          "path",
          "edit_path"
        ],
        "title": "PresentationPathAndEditPath"
      },
      "PresentationVersion": {
        "type": "string",
        "enum": [
          "v1-standard",
          "v2-standard"
        ],
        "title": "PresentationVersion"
      },
      "PresentationWithSlides": {
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid",
            "title": "Id"
          },
          "version": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Version"
          },
          "content": {
            "type": "string",
            "title": "Content"
          },
          "n_slides": {
            "type": "integer",
            "title": "N Slides"
          },
          "language": {
            "type": "string",
            "title": "Language"
          },
          "title": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Title"
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "title": "Created At"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time",
            "title": "Updated At"
          },
          "tone": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Tone"
          },
          "verbosity": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Verbosity"
          },
          "slides": {
            "items": {
              "$ref": "#/components/schemas/SlideModel"
            },
            "type": "array",
            "title": "Slides"
          },
          "fonts": {
            "anyOf": [
              {},
              {
                "type": "null"
              }
            ],
            "title": "Fonts"
          }
        },
        "type": "object",
        "required": [
          "id",
          "content",
          "n_slides",
          "language",
          "created_at",
          "updated_at",
          "slides"
        ],
        "title": "PresentationWithSlides"
      },
      "SlideContentUpdate": {
        "properties": {
          "index": {
            "type": "integer",
            "title": "Index"
          },
          "content": {
            "additionalProperties": true,
            "type": "object",
            "title": "Content"
          }
        },
        "type": "object",
        "required": [
          "index",
          "content"
        ],
        "title": "SlideContentUpdate"
      },
      "SlideModel": {
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid",
            "title": "Id"
          },
          "presentation": {
            "type": "string",
            "format": "uuid",
            "title": "Presentation"
          },
          "layout_group": {
            "type": "string",
            "title": "Layout Group"
          },
          "layout": {
            "type": "string",
            "title": "Layout"
          },
          "index": {
            "type": "integer",
            "title": "Index"
          },
          "content": {
            "additionalProperties": true,
            "type": "object",
            "title": "Content"
          },
          "html_content": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Html Content"
          },
          "speaker_note": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Speaker Note"
          },
          "properties": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Properties"
          },
          "ui": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Ui"
          }
        },
        "type": "object",
        "required": [
          "presentation",
          "layout_group",
          "layout",
          "index",
          "content",
          "properties"
        ],
        "title": "SlideModel"
      },
      "SubscribeToWebhookRequest": {
        "properties": {
          "url": {
            "type": "string",
            "title": "Url",
            "description": "The URL to send the webhook to"
          },
          "secret": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Secret",
            "description": "The secret to use for the webhook"
          },
          "event": {
            "$ref": "#/components/schemas/WebhookEvent",
            "description": "The event to subscribe to"
          }
        },
        "type": "object",
        "required": [
          "url",
          "event"
        ],
        "title": "SubscribeToWebhookRequest"
      },
      "SubscribeToWebhookResponse": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          }
        },
        "type": "object",
        "required": [
          "id"
        ],
        "title": "SubscribeToWebhookResponse"
      },
      "Tone": {
        "type": "string",
        "enum": [
          "default",
          "casual",
          "professional",
          "funny",
          "educational",
          "sales_pitch"
        ],
        "title": "Tone"
      },
      "ValidationError": {
        "properties": {
          "loc": {
            "items": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "integer"
                }
              ]
            },
            "type": "array",
            "title": "Location"
          },
          "msg": {
            "type": "string",
            "title": "Message"
          },
          "type": {
            "type": "string",
            "title": "Error Type"
          },
          "input": {
            "title": "Input"
          },
          "ctx": {
            "type": "object",
            "title": "Context"
          }
        },
        "type": "object",
        "required": [
          "loc",
          "msg",
          "type"
        ],
        "title": "ValidationError"
      },
      "Verbosity": {
        "type": "string",
        "enum": [
          "concise",
          "standard",
          "text-heavy"
        ],
        "title": "Verbosity"
      },
      "WebhookEvent": {
        "type": "string",
        "enum": [
          "presentation.generation.completed",
          "presentation.generation.failed"
        ],
        "title": "WebhookEvent"
      }
    },
    "securitySchemes": {
      "BasicAuth": {
        "type": "http",
        "scheme": "basic"
      }
    },
    "responses": {
      "Unauthorized": {
        "description": "Authentication is missing or invalid."
      },
      "ServerError": {
        "description": "Presenton or one of its configured dependencies failed."
      }
    }
  },
  "servers": [
    {
      "url": "http://localhost:5001",
      "description": "Local self-hosted instance"
    }
  ],
  "tags": [
    {
      "name": "Presentations",
      "description": "Generate and manage presentations."
    },
    {
      "name": "Files and media",
      "description": "Upload source files and images."
    },
    {
      "name": "Templates and design",
      "description": "Select reusable presentation designs."
    },
    {
      "name": "Async and webhooks",
      "description": "Monitor background work and receive events."
    }
  ]
}