{"openapi":"3.0.0","paths":{"/realtime/health":{"get":{"operationId":"realtime_health","parameters":[],"responses":{"200":{"description":""}},"summary":"Realtime gateway health","tags":["realtime"]}},"/boards":{"post":{"description":"Creates a board owned by the authenticated user, who is added as its first member and administrator.\n\nRate limit: at most 20 boards per hour may be created through this endpoint. Only boards created through the public API count towards the limit; boards created through the private API do not. Exceeding it returns 429.\n\nRequired Body Parameters:\n- name: Name of the board\n\nOptional Body Parameters:\n- description: Description of the board\n- visibility: Visibility of the board (public, private, hidden). Defaults to public\n- safety: Safety level of the board (sfw, nsfw). Defaults to sfw\n- challengeDeadline: ISO date string for the challenge deadline","operationId":"public_board_create","parameters":[],"requestBody":{"required":true,"description":"Board creation parameters.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BoardCreateRequest"}}}},"responses":{"201":{"description":"The board was successfully created.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BoardDto"}}}},"400":{"description":"Bad Request. Possible reasons:\n\n      - `name`: Must be a non-empty string.\n      - `description`: Must be a string.\n      - `visibility`: Must be one of [public, private, hidden].\n      - `safety`: Must be one of [sfw, nsfw].\n      - `challengeDeadline`: Must be a valid ISO date string.\n    "},"401":{"description":"Unauthorized. Authentication token is missing or invalid."},"422":{"description":"Unprocessable Entity. The request payload contains invalid data."},"429":{"description":"Too Many Requests. The hourly board creation limit for the API has been reached."},"500":{"description":"Internal Server Error. An unexpected error occurred."}},"security":[{"bearer":[]}],"summary":"Create a new board","tags":["boards"]},"get":{"description":"Retrieves a paginated list of boards visible to the authenticated user: every public board plus the private boards the user is a member of.\n\nOptional Query Parameters:\n- page: Page number (default: 1)\n- limit: Items per page (1-50, default: 10)\n- sortBy: Field to sort by\n- sortOrder: \"ASC\" or \"DESC\"\n- search: Search term matched on the board name\n- name: Filter by exact board name\n- visibility: Filter by board visibility\n- safety: Filter by board safety\n- ownerId: Filter by board owner\n- isMember: Filter by board membership\n- isOwner: Filter by board ownership\n\nResponse Headers:\n- X-Total-Count: Total count of items\n- X-Current-Page: Current page of pagination\n- X-Per-Page: Results per page\n- X-Total-Pages: Total count of pages","operationId":"public_board_list","parameters":[{"name":"page","required":false,"in":"query","description":"Page number","schema":{"default":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Number of items per page","schema":{"default":10,"type":"number"}},{"name":"sortBy","required":false,"in":"query","description":"Field to sort by","schema":{"type":"string"}},{"name":"sortOrder","required":false,"in":"query","description":"Sort order (case insensitive)","schema":{"example":"ASC","type":"string","enum":["ASC","DESC","asc","desc"]}},{"name":"search","required":false,"in":"query","description":"Search term matched on name","schema":{"type":"string"}},{"name":"name","required":false,"in":"query","description":"Filter by exact board name","schema":{"type":"string"}},{"name":"visibility","required":false,"in":"query","schema":{"type":"string","enum":["public","private","hidden"]}},{"name":"safety","required":false,"in":"query","schema":{"type":"string","enum":["nsfw","sfw"]}},{"name":"ownerId","required":false,"in":"query","description":"Filter by board owner","schema":{"type":"string"}},{"name":"isMember","required":false,"in":"query","description":"Only boards the authenticated user is (not) a member of","schema":{"type":"boolean"}},{"name":"isOwner","required":false,"in":"query","description":"Only boards the authenticated user does (not) own","schema":{"type":"boolean"}}],"responses":{"200":{"headers":{"X-Total-Count":{"description":"Total count of items","type":"number"},"X-Current-Page":{"description":"Current page of pagination","type":"number"},"X-Per-Page":{"description":"Results per page","type":"number"},"X-Total-Pages":{"description":"Total count of pages","type":"number"}},"description":"Paginated list of boards.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/BoardDto"}}}}},"400":{"description":"Bad Request. Possible reasons:\n\n      - Pagination parameters (`page`, `limit`) must be positive integers between 1 and 50.\n      - Sort parameters (`sortBy`, `sortOrder`) must be valid values.\n      - `visibility`: Must be one of [public, private, hidden].\n      - `safety`: Must be one of [nsfw, sfw].\n      - `ownerId`: Must be a valid UUID.\n    "},"401":{"description":"Unauthorized. Authentication token is missing or invalid."},"500":{"description":"Internal Server Error. An unexpected error occurred."}},"security":[{"bearer":[]}],"summary":"List boards","tags":["boards"]}},"/boards/{boardId}/feed":{"get":{"description":"Retrieves the content of a board — its images and its videos — as one ranked, paginated list. Boards that are not public are only accessible to their members. Only content that has finished generating is returned.\n\nRequired Parameters:\n- boardId: UUID of the board\n\nOptional Query Parameters:\n- page: Page number (default: 1)\n- limit: Items per page (1-50, default: 10)\n- entityType: \"image\", \"video\" or \"all\" (default: all)\n- sortBy: \"score\", \"createdAt\", \"likes\" or \"comments\" (default: score)\n- sortOrder: \"ASC\" or \"DESC\" (default: DESC)\n- includeNsfw: Include content flagged as NSFW (default: false). Ignored on boards whose safety is `sfw`\n\nResponse Headers:\n- X-Total-Count: Total count of items\n- X-Current-Page: Current page of pagination\n- X-Per-Page: Results per page\n- X-Total-Pages: Total count of pages","operationId":"public_board_feed","parameters":[{"name":"boardId","required":true,"in":"path","description":"UUID of the board.","schema":{"format":"uuid","type":"string"}},{"name":"page","required":false,"in":"query","description":"Page number","schema":{"default":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Number of items per page","schema":{"default":10,"type":"number"}},{"name":"sortBy","required":false,"in":"query","description":"Field to sort by. `score` ranks by engagement and recency combined.","schema":{"default":"score","type":"string","enum":["score","createdAt","likes","comments"]}},{"name":"sortOrder","required":false,"in":"query","description":"Sort order (case insensitive)","schema":{"default":"DESC","example":"ASC","type":"string","enum":["ASC","DESC","asc","desc"]}},{"name":"entityType","required":false,"in":"query","description":"Restrict the feed to images only, videos only, or both","schema":{"default":"all","type":"string","enum":["image","video","all"]}},{"name":"includeNsfw","required":false,"in":"query","description":"Include content flagged as NSFW. Ignored on boards whose safety is `sfw`.","schema":{"default":false,"type":"boolean"}}],"responses":{"200":{"headers":{"X-Total-Count":{"description":"Total count of items","type":"number"},"X-Current-Page":{"description":"Current page of pagination","type":"number"},"X-Per-Page":{"description":"Results per page","type":"number"},"X-Total-Pages":{"description":"Total count of pages","type":"number"}},"description":"Paginated feed of the board.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/BoardFeedItemDto"}}}}},"400":{"description":"Bad Request. Possible reasons:\n\n      - `boardId`: Must be a valid UUID.\n      - Pagination parameters (`page`, `limit`) must be positive integers between 1 and 50.\n      - `entityType`: Must be one of [image, video, all].\n      - `sortBy`: Must be one of [score, createdAt, likes, comments].\n      - `sortOrder`: Must be one of [ASC, DESC].\n    "},"401":{"description":"Unauthorized. Authentication token is missing or invalid."},"403":{"description":"Forbidden. The user does not have access to this board."},"404":{"description":"Not Found. The board could not be found."},"500":{"description":"Internal Server Error. An unexpected error occurred."}},"security":[{"bearer":[]}],"summary":"Get the feed of a board","tags":["boards"]}},"/images":{"post":{"description":"Creates a new image generation task from a text prompt.\n\nSupports both user integration and organization integration tokens.\n\nRequired Parameters:\n- prompt: Text description of the desired image\n\nOptional Parameters:\n- width: Image width in pixels (480-2160, default: 1600)\n- height: Image height in pixels (480-2160, default: 1600)\n- quality: Generation quality level (1-6, default: 2)\n- creativity: Creative variation level (1-6, default: 2)\n- hasWatermark: Apply watermark (default: true)\n- webhookUrl: Optional URL to receive a POST notification when generation is complete\n- baseModel: Base model identifier used for generation (max 255 characters)\n- systemVersion: AI system version (2 or 3)\n- mode: Generation mode (\"default\" or \"sigma\")\n- hidePrompt: Whether to hide prompt in public listings (default: false)\n- organizationId: Organization UUID to deduct credits from (user must be a member)\n\nCredit Deduction:\n- If organizationId is provided, credits will be deducted from the organization account\n- If organizationId is not provided, credits will be deducted from the user account\n- User must be a member of the organization to use organization credits\n\nMonitor the generation status using the GET /images/{id} endpoint.","operationId":"images_create","parameters":[],"requestBody":{"required":true,"description":"The image creation request parameters including prompt, dimensions, and quality settings","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImageRequest"}}}},"responses":{"201":{"description":"The image generation request was successfully created and queued for processing","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImageDto"}}}},"400":{"description":"\n      Bad Request. Possible reasons:\n      - `width`: Must be between 480 and 2160 pixels.\n      - `height`: Must be between 480 and 2160 pixels.\n      - `quality`: Must be between 1 and 6.\n      - `creativity`: Must be between 1 and 6.\n      - `systemVersion`: Must be either 2 or 3.\n      - `mode`: Must be a valid value from the `ModeEnum`.\n      - `organizationId`: Must be a valid UUID format.\n      - Invalid or unavailable model referenced in prompt.\n      - Failed to analyze prompt or parameters.\n    "},"401":{"description":"Unauthorized. Authentication token is missing or invalid, or user is not a member of the specified organization"},"402":{"description":"Payment Required. Insufficient credits to create the image (either user or organization credits depending on request)"},"500":{"description":"Internal Server Error. An unexpected error occurred during image creation"}},"security":[{"bearer":[]}],"summary":"Create a new image","tags":["images"]},"get":{"description":"Retrieves a paginated list of images.\n\nQuery Parameters:\n- page: Page number (default: 1)\n- limit: Items per page (1-50, default: 10)\n- sortBy: Field to sort by\n- sortOrder: \"ASC\" or \"DESC\"\n- userId: Filter by user ID\n- username: Filter by username\n- privacy: Filter by privacy level\n- systemVersion: Filter by system version\n- isHot: Filter by hot images\n- includeNsfw: Include NSFW content (default: false)\n- onlyFollowing: Show only images from followed users\n- modelIds: Filter by model IDs\n- status: Filter by status (see Status Values)\n\nStatus Values:\n- new: Initial state, waiting to be processed\n- generating: Currently being generated\n- ready: Generation completed successfully\n- failed: Generation failed\n- interrupted: Generation was interrupted\n- not_allowed: Generation was rejected\n\nResponse Headers:\n- X-Total-Count: Total count of items\n- X-Current-Page: Current page of pagination\n- X-Per-Page: Results per page\n- X-Total-Pages: Total count of pages","operationId":"images_find","parameters":[{"name":"page","required":false,"in":"query","description":"Page number","schema":{"default":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Number of items per page","schema":{"default":10,"type":"number"}},{"name":"sortBy","required":false,"in":"query","description":"Field to sort by","schema":{"type":"string"}},{"name":"sortOrder","required":false,"in":"query","description":"Sort order (case insensitive)","schema":{"example":"ASC","type":"string","enum":["ASC","DESC","asc","desc"]}},{"name":"userId","required":false,"in":"query","schema":{"type":"string"}},{"name":"username","required":false,"in":"query","schema":{"type":"string"}},{"name":"privacy","required":true,"in":"query","schema":{"type":"string","enum":["public","private","licensed"]}},{"name":"status","required":true,"in":"query","schema":{"type":"string","enum":["new","generating","ready","hidden","failed","interrupted","not_allowed"]}},{"name":"systemVersion","required":false,"in":"query","schema":{"type":"number"}},{"name":"isHot","required":false,"in":"query","schema":{"type":"boolean"}},{"name":"includeNsfw","required":true,"in":"query","schema":{"type":"boolean"}},{"name":"onlyFollowing","required":false,"in":"query","schema":{"type":"boolean"}},{"name":"modelIds","required":false,"in":"query","schema":{"type":"array","items":{"type":"string"}}},{"description":"Page number","required":false,"name":"page","in":"query","schema":{"default":1,"type":"number"}},{"description":"Number of items per page","required":false,"name":"limit","in":"query","schema":{"default":10,"type":"number"}},{"description":"Field to sort by","required":false,"name":"sortBy","in":"query","schema":{"type":"string"}},{"description":"Sort order (case insensitive)","required":false,"name":"sortOrder","in":"query","schema":{"example":"ASC","type":"string"}},{"required":false,"name":"userId","in":"query","schema":{"type":"string"}},{"required":false,"name":"username","in":"query","schema":{"type":"string"}},{"name":"privacy","in":"query","required":true,"schema":{"type":"string"}},{"name":"status","in":"query","required":true,"schema":{"type":"string"}},{"required":false,"name":"systemVersion","in":"query","schema":{"type":"number"}},{"required":false,"name":"isHot","in":"query","schema":{"type":"boolean"}},{"name":"includeNsfw","in":"query","required":true,"schema":{"type":"boolean"}},{"required":false,"name":"onlyFollowing","in":"query","schema":{"type":"boolean"}},{"required":false,"name":"modelIds","in":"query","schema":{"type":"array","items":{"type":"string"}}}],"responses":{"200":{"headers":{"X-Total-Count":{"description":"Total count of items","type":"number"},"X-Current-Page":{"description":"Current page of pagination","type":"number"},"X-Per-Page":{"description":"Results per page","type":"number"},"X-Total-Pages":{"description":"Total count of pages","type":"number"}},"description":"Successfully retrieved the list of images","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ImageDto"}}}}},"400":{"description":"\n      Bad Request. Possible reasons:\n      - `page`: Must be a positive integer.\n      - `limit`: Must be a positive integer between 1 and 50.\n      - `sortBy`: Must be one of the allowed sort fields.\n      - `sortOrder`: Must be either 'ASC' or 'DESC'.\n      - Invalid filter parameters provided.\n      - Malformed query parameters.\n    "},"401":{"description":"Unauthorized. Authentication token is missing or invalid"},"500":{"description":"Internal Server Error. An unexpected error occurred while retrieving images"}},"security":[{"bearer":[]}],"summary":"Find and filter images","tags":["images"]}},"/images/{id}":{"get":{"description":"Retrieves information about a specific image by ID.\n\nPath Parameters:\n- id: UUID of the image","operationId":"images_get","parameters":[{"name":"id","required":true,"in":"path","description":"The unique identifier of the image","schema":{"format":"uuid","type":"string"}}],"responses":{"200":{"description":"Successfully retrieved the image details","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImageDto"}}}},"400":{"description":"\n      Bad Request. Possible reasons:\n      - `id`: Must be a valid UUID format.\n    "},"401":{"description":"Unauthorized. Authentication token is missing or invalid"},"404":{"description":"Not Found. The requested image does not exist"},"500":{"description":"Internal Server Error. An unexpected error occurred while retrieving the image"}},"security":[{"bearer":[]}],"summary":"Get detailed image information","tags":["images"]}},"/images/{id}/interruption":{"put":{"description":"Stops the ongoing generation process for a specific image.\n\nPath Parameters:\n- id: UUID of the image to interrupt\n\nThe endpoint will:\n- Stop the generation process\n- Update image status to interrupted\n\nThis endpoint only works for images in NEW or GENERATING status.","operationId":"images_interrupt","parameters":[{"name":"id","required":true,"in":"path","description":"The unique identifier of the image to interrupt","schema":{"format":"uuid","type":"string"}}],"responses":{"204":{"description":"The image generation was successfully interrupted."},"400":{"description":"\n      Bad Request. Possible reasons:\n      - Image is not in NEW or GENERATING state\n      - Image does not exist\n      - Image belongs to another user\n    "},"401":{"description":"Unauthorized. The user is not authenticated."},"404":{"description":"Not Found. The requested image could not be found."},"500":{"description":"Internal Server Error. An unexpected error occurred."}},"security":[{"bearer":[]}],"summary":"Interrupt image generation","tags":["images"]}},"/images/{id}/privacy":{"put":{"description":"Changes the privacy settings of an image.\n\nPath Parameters:\n- id: UUID of the image\n\nRequest Body:\n- privacy: New privacy level (public, private, organization)\n\nThis endpoint only works for images in READY status.","operationId":"images_privacy_change","parameters":[{"name":"id","required":true,"in":"path","description":"The unique identifier of the image to update","schema":{"format":"uuid","type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImagePrivacyRequest"}}}},"responses":{"204":{"description":"The image privacy was successfully updated."},"400":{"description":"\n      Bad Request. Possible reasons:\n      - Image is not in READY state\n      - Image contains NSFW content\n      - Image uses private models\n      - Invalid privacy value\n    "},"401":{"description":"Unauthorized. The user is not authenticated."},"404":{"description":"Not Found. The requested image could not be found."},"500":{"description":"Internal Server Error. An unexpected error occurred."}},"security":[{"bearer":[]}],"summary":"Update image privacy","tags":["images"]}},"/images/{id}/prompt-privacy":{"put":{"description":"Changes the prompt privacy settings of an image.\n\nPath Parameters:\n- id: UUID of the image\n\nRequest Body:\n- hidePrompt: Boolean indicating if the prompt should be hidden\n\nThis endpoint only works for images owned by the authenticated user.","operationId":"images_prompt_privacy_change","parameters":[{"name":"id","required":true,"in":"path","description":"The unique identifier of the image to update prompt privacy","schema":{"format":"uuid","type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImagePromptPrivacyRequest"}}}},"responses":{"204":{"description":"The image prompt privacy was successfully updated."},"400":{"description":"\n      Bad Request. Possible reasons:\n      - Invalid prompt privacy value\n    "},"401":{"description":"Unauthorized. The user is not authenticated."},"404":{"description":"Not Found. The requested image could not be found."},"500":{"description":"Internal Server Error. An unexpected error occurred."}},"security":[{"bearer":[]}],"summary":"Update image prompt privacy","tags":["images"]}},"/image-edits":{"post":{"description":"Creates an image edit task that modifies an existing image using inpainting, outpainting, or skin editing.\n\nRequired Parameters:\n- mode: \"in\" for inpainting (modify within image), \"out\" for outpainting (extend image), \"skin\" for skin editing, or \"context\" for context editing\n\nOptional Parameters:\n- originalImageCompletionIds: Array of UUIDs of original image completions\n- inputImageUrls: Array of source image URLs to edit\n- originalImageCompletionId: UUID of the original image completion to edit (alternative to inputImageUrls)\n- imageUrl: Source image URL to edit (alternative to originalImageCompletionIds)\n- prompt: Text description of the desired modifications\n- baseModel: Base model identifier for generation (max 255 characters)\n- mask: Base64 encoded image mask (required for inpainting)\n- width/height: Target dimensions for the edited image in pixels\n- imageCompletionsCount: Number of variations to generate (1-5, default: 3)\n- organizationId: Organization UUID to deduct credits from (user must be a member)\n- settings: Additional generation settings object\n- hidePrompt: Whether to hide prompt in public listings (default: false)\n- webhookUrl: Optional URL to receive a POST notification when edit is complete\n\nCredit Deduction:\n- If organizationId is provided, credits will be deducted from the organization account\n- If organizationId is not provided, credits will be deducted from the user account\n- User must be a member of the organization to use organization credits\n\nResponse includes:\n- originalImageCompletions: Array of original image completions used as source\n- originalImageCompletionIds: Array of UUIDs of original image completions\n\nMonitor the edit status using the GET /image-edits/{id} endpoint.","operationId":"image_edit_create","parameters":[],"requestBody":{"required":true,"description":"The image edit request parameters","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImageEditRequest"}}}},"responses":{"201":{"description":"The image edit was successfully created.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImageEditDto"}}}},"400":{"description":"\n      Bad Request. Possible reasons:\n      - Invalid input parameters\n      - Source image does not exist\n      - Source image is not in a valid state\n      - Invalid edit settings\n      - organizationId: Must be a valid UUID format\n    "},"401":{"description":"Unauthorized. The user is not authenticated, or user is not a member of the specified organization."},"402":{"description":"Payment Required. Insufficient credits to create the image edit (either user or organization credits depending on request)."},"500":{"description":"Internal Server Error. An unexpected error occurred during image edit creation."}},"security":[{"bearer":[]}],"summary":"Create a new image edit","tags":["image-edit"]},"get":{"description":"Retrieves a paginated list of image edits.\n\nQuery Parameters:\n- page: Page number (default: 1)\n- limit: Items per page (default: 20)\n- sortBy: Field to sort by (createdAt, status)\n- sortOrder: \"ASC\" or \"DESC\"\n- status: Filter by status (see Status Values)\n\nStatus Values:\n- new: Edit task created but not started\n- generating: Currently processing the edit\n- ready: Edit completed successfully\n- saved: Edit has been saved by user\n- failed: Edit failed to process\n- interrupted: Edit was stopped by user\n\nResponse Headers:\n- X-Total-Count: Total count of items\n- X-Current-Page: Current page of pagination\n- X-Per-Page: Results per page\n- X-Total-Pages: Total count of pages","operationId":"image_edit_find","parameters":[{"name":"page","required":false,"in":"query","description":"Page number","schema":{"default":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Number of items per page","schema":{"default":10,"type":"number"}},{"name":"sortBy","required":false,"in":"query","description":"Field to sort by","schema":{"type":"string"}},{"name":"sortOrder","required":false,"in":"query","description":"Sort order (case insensitive)","schema":{"example":"ASC","type":"string","enum":["ASC","DESC","asc","desc"]}},{"name":"status","required":true,"in":"query","schema":{"type":"string","enum":["new","generating","ready","saved","failed","interrupted"]}},{"description":"Page number","required":false,"name":"page","in":"query","schema":{"default":1,"type":"number"}},{"description":"Number of items per page","required":false,"name":"limit","in":"query","schema":{"default":10,"type":"number"}},{"description":"Field to sort by","required":false,"name":"sortBy","in":"query","schema":{"type":"string"}},{"description":"Sort order (case insensitive)","required":false,"name":"sortOrder","in":"query","schema":{"example":"ASC","type":"string"}},{"name":"status","in":"query","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"List of image edits successfully retrieved.","headers":{"X-Total-Count":{"description":"Total count of items","type":"number"},"X-Current-Page":{"description":"Current page of pagination","type":"number"},"X-Per-Page":{"description":"Results per page","type":"number"},"X-Total-Pages":{"description":"Total count of pages","type":"number"}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ImageEditDto"}}}}},"400":{"description":"\n      Bad Request. Possible reasons:\n      - Invalid pagination parameters\n      - Invalid sort parameters\n      - Invalid filter values\n    "},"401":{"description":"Unauthorized. The user is not authenticated."},"500":{"description":"Internal Server Error. An unexpected error occurred while retrieving the image edits."}},"security":[{"bearer":[]}],"summary":"Find image edits","tags":["image-edit"]}},"/image-edits/{id}":{"get":{"description":"Retrieves a specific image edit by ID.\n\nPath Parameters:\n- id: UUID of the image edit\n\n","operationId":"image_edit_get","parameters":[{"name":"id","required":true,"in":"path","description":"The unique identifier of the image edit to retrieve","schema":{"type":"string"}}],"responses":{"200":{"description":"The image edit was successfully retrieved.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImageEditDto"}}}},"400":{"description":"\n      Bad Request. Possible reasons:\n      - Invalid ID format\n    "},"401":{"description":"Unauthorized. The user is not authenticated."},"404":{"description":"Not Found. The requested image edit could not be found."},"500":{"description":"Internal Server Error. An unexpected error occurred while retrieving the image edit."}},"security":[{"bearer":[]}],"summary":"Get an image edit","tags":["image-edit"]}},"/image-edits/{imageCompletionId}/mask":{"get":{"description":"Retrieves the mask associated with an image completion.\n\nPath Parameters:\n- imageCompletionId: UUID of the image completion\n\nReturns the mask data that was used for the image edit. This endpoint is useful for retrieving the original mask used in inpainting operations.","operationId":"image_edit_get_mask","parameters":[{"name":"imageCompletionId","required":true,"in":"path","description":"ID of the image completion to retrieve the mask for","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImageEditMaskDto"}}}},"400":{"description":""}},"security":[{"bearer":[]}],"summary":"Get mask for image completion","tags":["image-edit"]}},"/models":{"get":{"description":"Retrieves a list of models based on search criteria.\n\nQuery Parameters:\n- page: Page number\n- limit: Items per page\n- sortBy: Field to sort by\n- sortOrder: Sort direction (ASC, DESC)\n- search: General search term\n- name: Filter by model name\n- userId: Filter by user ID\n- username: Filter by username\n- class: Filter by model class\n- type: Filter by model type\n- description: Filter by model description\n- privacy: Filter by privacy level (public, private, licensed)\n- systemVersion: Filter by system version\n- isActive: Filter by active status\n- status: Filter by status (see Status Values)\n\nStatus Values:\n- new: Initial state after creation\n- pending: Waiting for training to start\n- training: Currently being trained\n- finished: Training completed\n- available: Ready for public use\n- failed: Training failed\n\nResponse Headers:\n- X-Total-Count: Total count of items\n- X-Current-Page: Current page of pagination\n- X-Per-Page: Results per page\n- X-Total-Pages: Total count of pages","operationId":"models_find","parameters":[{"name":"page","required":false,"in":"query","description":"Page number","schema":{"default":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Number of items per page","schema":{"default":10,"type":"number"}},{"name":"sortBy","required":false,"in":"query","description":"Field to sort by","schema":{"type":"string"}},{"name":"sortOrder","required":false,"in":"query","description":"Sort order (case insensitive)","schema":{"example":"ASC","type":"string","enum":["ASC","DESC","asc","desc"]}},{"name":"search","required":false,"in":"query","schema":{"type":"string"}},{"name":"name","required":false,"in":"query","schema":{"type":"string"}},{"name":"userId","required":false,"in":"query","schema":{"type":"string"}},{"name":"username","required":false,"in":"query","schema":{"type":"string"}},{"name":"class","required":false,"in":"query","schema":{"type":"string"}},{"name":"type","required":false,"in":"query","schema":{"type":"string"}},{"name":"description","required":false,"in":"query","schema":{"type":"string"}},{"name":"privacy","required":false,"in":"query","schema":{"type":"string","enum":["public","private","licensed"]}},{"name":"systemVersion","required":false,"in":"query","schema":{"type":"number"}},{"name":"status","required":false,"in":"query","schema":{"type":"string","enum":["new","pending","training","finished","available","failed"]}},{"name":"isActive","required":false,"in":"query","schema":{"type":"boolean"}},{"description":"Page number","required":false,"name":"page","in":"query","schema":{"default":1,"type":"number"}},{"description":"Number of items per page","required":false,"name":"limit","in":"query","schema":{"default":10,"type":"number"}},{"description":"Field to sort by","required":false,"name":"sortBy","in":"query","schema":{"type":"string"}},{"description":"Sort order (case insensitive)","required":false,"name":"sortOrder","in":"query","schema":{"example":"ASC","type":"string"}},{"required":false,"name":"search","in":"query","schema":{"type":"string"}},{"required":false,"name":"name","in":"query","schema":{"type":"string"}},{"required":false,"name":"userId","in":"query","schema":{"type":"string"}},{"required":false,"name":"username","in":"query","schema":{"type":"string"}},{"required":false,"name":"class","in":"query","schema":{"type":"string"}},{"required":false,"name":"type","in":"query","schema":{"type":"string"}},{"required":false,"name":"description","in":"query","schema":{"type":"string"}},{"required":false,"name":"privacy","in":"query","schema":{"type":"string"}},{"required":false,"name":"systemVersion","in":"query","schema":{"type":"number"}},{"required":false,"name":"status","in":"query","schema":{"type":"string"}},{"required":false,"name":"isActive","in":"query","schema":{"type":"boolean"}}],"responses":{"200":{"headers":{"X-Total-Count":{"description":"Total count of items","type":"number"},"X-Current-Page":{"description":"Current page of pagination","type":"number"},"X-Per-Page":{"description":"Results per page","type":"number"},"X-Total-Pages":{"description":"Total count of pages","type":"number"}},"description":"List of models matching the search criteria.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ModelDto"}}}}},"400":{"description":"\n      Bad Request. Possible reasons:\n      - Invalid query parameters\n      - Invalid pagination values\n      - Invalid sort parameters\n      - Malformed filters\n    "},"401":{"description":"Unauthorized. The user is not authenticated."},"422":{"description":"Unprocessable Entity. The search request contains invalid data."},"500":{"description":"Internal Server Error. An unexpected error occurred while retrieving models."}},"security":[{"bearer":[]}],"summary":"Find models","tags":["models"]},"post":{"description":"Creates a new AI model for image generation.\n\nRequest Body Parameters:\n- name: Model identifier (alphanumeric, underscores, dots)\n- privacy: Access level (public, private, organization)\n- type: Model type classification\n- class: Model category\n- description: Optional description of the model\n- website: Optional website URL\n- settings: Optional array of settings (NO_ADULT_CONTENT, NO_VIOLENCE, etc)\n- trainingDataUrls: Optional array of image URLs for training (when provided: 1-50 URLs)\n- webhookUrl: Optional URL to receive a POST notification when training is complete\n- trainingMode: Optional training mode (e.g., \"default\", \"sigma\")\n- organizationId: Organization UUID to deduct credits from (user must be a member)\n\nCredit Deduction:\n- If organizationId is provided, credits will be deducted from the organization account\n- If organizationId is not provided, credits will be deducted from the user account\n- User must be a member of the organization to use organization credits\n\nTraining starts automatically after creation.","operationId":"models_create","parameters":[],"requestBody":{"required":true,"description":"The model creation request payload","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelCreateRequest"}}}},"responses":{"201":{"description":"The model was successfully created.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelDto"}}}},"400":{"description":"\n      Bad Request. Possible reasons:\n      - `name`: Must contain only alphanumeric characters, underscores, and dots.\n      - `name`: Must be shorter than or equal to 255 characters.\n      - `privacy`: Must be a valid value from the `PrivacyEnum`.\n      - `type`: Must contain only allowed characters (alphanumeric, commas, hyphens, etc.).\n      - `class`: Must be a valid value from the `ClassEnum`.\n      - `trainingDataUrls`: Must be an array of valid URLs (max 50).\n      - `webhookUrl`: Must be a valid URL.\n      - `trainingMode`: Must be a valid value from the `TrainingModeEnum`.\n      - `organizationId`: Must be a valid UUID format.\n      - Missing or invalid `class` field (mandatory).\n      - Failed to analyze model type due to invalid training data URLs.\n    "},"401":{"description":"Unauthorized. The user is not authenticated, or user is not a member of the specified organization."},"402":{"description":"Payment Required. Insufficient credits to create the model (either user or organization credits depending on request)."},"404":{"description":"Not Found. The requested resource could not be found."},"500":{"description":"Internal Server Error. An unexpected error occurred."}},"security":[{"bearer":[]}],"summary":"Create a new model","tags":["models"]}},"/models/{id}":{"get":{"description":"Retrieves detailed information about a specific model.\n\nPath Parameters:\n- id: UUID of the model to retrieve\n","operationId":"models_get","parameters":[{"name":"id","required":true,"in":"path","description":"The unique identifier of the model to retrieve","schema":{"format":"uuid","type":"string"}}],"responses":{"200":{"description":"The requested model details.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelDto"}}}},"400":{"description":"\n      Bad Request. Possible reasons:\n      - Invalid ID format\n    "},"401":{"description":"Unauthorized. The user is not authenticated."},"404":{"description":"Not Found. The requested model could not be found."},"500":{"description":"Internal Server Error. An unexpected error occurred while retrieving the model."}},"security":[{"bearer":[]}],"summary":"Get a model","tags":["models"]},"patch":{"description":"Updates the information of an existing model.\n\nPath Parameters:\n- id: UUID of the model\n\nRequest Body:\n- privacy: New privacy setting (public, private, licensed)\n- type: New model type\n- description: New model description\n- website: New website URL\n- settings: New model settings","operationId":"model_update","parameters":[{"name":"id","required":true,"in":"path","description":"Model ID","schema":{"format":"uuid","type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelUpdateRequest"}}}},"responses":{"200":{"description":"The model was successfully updated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelDto"}}}},"400":{"description":"Invalid request parameters or model ID format"},"401":{"description":"Unauthorized. The user is not authenticated"},"404":{"description":"Not Found. The model to update could not be found"}},"security":[{"bearer":[]}],"summary":"Update model information","tags":["models"]},"delete":{"description":"Permanently deletes a model.\n\nPath Parameters:\n- id: UUID of the model to delete","operationId":"models_delete","parameters":[{"name":"id","required":true,"in":"path","description":"The unique identifier of the model to delete","schema":{"format":"uuid","type":"string"}}],"responses":{"204":{"description":"The model was successfully deleted."},"400":{"description":"\n      Bad Request. Possible reasons:\n      - Invalid ID format\n      - Model is in use by active generations\n    "},"401":{"description":"Unauthorized. The user is not authenticated."},"404":{"description":"Not Found. The requested model could not be found."},"409":{"description":"Conflict. The model cannot be deleted because it is being used by other resources."},"500":{"description":"Internal Server Error. An unexpected error occurred while deleting the model."}},"security":[{"bearer":[]}],"summary":"Delete a model","tags":["models"]}},"/models/{id}/thumbnail":{"put":{"description":"Updates the thumbnail of a model.\n\nPath Parameters:\n- id: UUID of the model\n\nRequest Body:\n- imageCompletionId: UUID of the image to use as thumbnail","operationId":"model_thumbnail","parameters":[{"name":"id","required":true,"in":"path","description":"The unique identifier of the model to update","schema":{"format":"uuid","type":"string"}}],"requestBody":{"required":true,"description":"The thumbnail update request containing the image completion ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelThumbnailRequest"}}}},"responses":{"200":{"description":"The model thumbnail was successfully updated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelDto"}}}},"400":{"description":"\n      Bad Request. Possible reasons:\n      - Invalid model ID format\n      - Invalid image completion ID\n      - Image completion not ready\n      - Image completion does not belong to this model\n    "},"401":{"description":"Unauthorized. The user is not authenticated."},"404":{"description":"Not Found. The model to update could not be found."},"409":{"description":"\n      Conflict. Possible reasons:\n      - Model is currently being processed\n      - Model is in an invalid state for updates\n    "},"422":{"description":"Unprocessable Entity. The request payload contains invalid data."},"500":{"description":"Internal Server Error. An unexpected error occurred while updating the thumbnail."}},"security":[{"bearer":[]}],"summary":"Update model thumbnail","tags":["models"]}},"/upscale":{"post":{"description":"Creates a new upscale request for an existing image.\n\nRequest Body:\n- prompt: Optional text prompt to guide the upscale\n- mode: Upscale mode (any string, max 32 characters; default: default)\n- imageId: UUID of the source image (required if imageUrl not provided)\n- imageUrl: Direct URL to the image (required if imageId not provided)\n- type: Asset type (image or video; default: image)\n- assetUrl: Direct URL to the source asset\n- assetId: UUID of the source asset\n- size: Optional size of the upscale\n- strength: Upscale strength factor from 1 to 5 (default: 1)\n- organizationId: Organization UUID to deduct credits from (user must be a member)\n- webhookUrl: Optional URL to receive a POST notification when upscale is complete\n\nCredit Deduction:\n- If organizationId is provided, credits will be deducted from the organization account\n- If organizationId is not provided, credits will be deducted from the user account\n- User must be a member of the organization to use organization credits","operationId":"upscale_create","parameters":[],"requestBody":{"required":true,"description":"The upscale request parameters","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpscaleRequest"}}}},"responses":{"201":{"description":"The upscale request was successfully created.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpscaleDto"}}}},"400":{"description":"\n      Bad Request. Possible reasons:\n      - Invalid image ID\n      - Invalid upscale parameters\n      - Source image not in ready state\n      - organizationId: Must be a valid UUID format\n      - Organization does not exist\n      - Size must be at least 2\n      - Size must be at most 1024\n      - mode: Must be a string (max 32 characters).\n    "},"401":{"description":"Unauthorized. The user is not authenticated, or user is not a member of the specified organization."},"402":{"description":"Payment Required. Insufficient credit balance (either user or organization credits depending on request)."},"422":{"description":"Unprocessable Entity. The request payload contains invalid data."},"500":{"description":"Internal Server Error. An unexpected error occurred."}},"security":[{"bearer":[]}],"summary":"Generate a new upscale","tags":["upscale"]},"get":{"description":"Retrieves a paginated list of upscales.\n\nQuery Parameters:\n- page: Page number (default: 1)\n- limit: Items per page (1-50, default: 10)\n- sortBy: Field to sort by\n- sortOrder: \"ASC\" or \"DESC\"\n- userId: Filter by user ID\n- username: Filter by username\n- imageId: Filter by source image ID\n- onlyFollowing: Show only upscales from followed users\n- status: Filter by status (see Status Values)\n\nStatus Values:\n- new: Initial state, waiting to be processed\n- generating: Currently being upscaled\n- ready: Upscale completed successfully\n- failed: Upscale failed\n\nResponse Headers:\n- X-Total-Count: Total count of items\n- X-Current-Page: Current page of pagination\n- X-Per-Page: Results per page\n- X-Total-Pages: Total count of pages","operationId":"upscale_find","parameters":[{"name":"page","required":false,"in":"query","description":"Page number","schema":{"default":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Number of items per page","schema":{"default":10,"type":"number"}},{"name":"sortBy","required":false,"in":"query","description":"Field to sort by","schema":{"type":"string"}},{"name":"sortOrder","required":false,"in":"query","description":"Sort order (case insensitive)","schema":{"example":"ASC","type":"string","enum":["ASC","DESC","asc","desc"]}},{"name":"userId","required":false,"in":"query","schema":{"type":"string"}},{"name":"username","required":false,"in":"query","schema":{"type":"string"}},{"name":"imageId","required":false,"in":"query","schema":{"type":"string"}},{"name":"status","required":false,"in":"query","schema":{"type":"string","enum":["new","generating","ready","failed"]}},{"name":"onlyFollowing","required":false,"in":"query","schema":{"type":"boolean"}},{"description":"Page number","required":false,"name":"page","in":"query","schema":{"default":1,"type":"number"}},{"description":"Number of items per page","required":false,"name":"limit","in":"query","schema":{"default":10,"type":"number"}},{"description":"Field to sort by","required":false,"name":"sortBy","in":"query","schema":{"type":"string"}},{"description":"Sort order (case insensitive)","required":false,"name":"sortOrder","in":"query","schema":{"example":"ASC","type":"string"}},{"required":false,"name":"userId","in":"query","schema":{"type":"string"}},{"required":false,"name":"username","in":"query","schema":{"type":"string"}},{"required":false,"name":"imageId","in":"query","schema":{"type":"string"}},{"required":false,"name":"status","in":"query","schema":{"type":"string"}},{"required":false,"name":"onlyFollowing","in":"query","schema":{"type":"boolean"}}],"responses":{"200":{"headers":{"X-Total-Count":{"description":"Total count of items","type":"number"},"X-Current-Page":{"description":"Current page of pagination","type":"number"},"X-Per-Page":{"description":"Results per page","type":"number"},"X-Total-Pages":{"description":"Total count of pages","type":"number"}},"description":"List of upscales matching the search criteria.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/UpscaleDto"}}}}},"400":{"description":"Bad Request. The request parameters are invalid."},"401":{"description":"Unauthorized. The user is not authenticated."},"422":{"description":"Unprocessable Entity. Invalid search parameters."},"500":{"description":"Internal Server Error. An unexpected error occurred."}},"security":[{"bearer":[]}],"summary":"Find upscales","tags":["upscale"]}},"/upscale/{id}":{"get":{"description":"Retrieves details of a specific upscale.\n\nPath Parameters:\n- id: UUID of the upscale to retrieve","operationId":"upscale_get","parameters":[{"name":"id","required":true,"in":"path","description":"The unique identifier of the upscale to retrieve","schema":{"format":"uuid","type":"string"}}],"responses":{"200":{"description":"The requested upscale details.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpscaleDto"}}}},"400":{"description":"Bad Request. The request parameters are invalid."},"401":{"description":"Unauthorized. The user is not authenticated."},"404":{"description":"Not Found. The requested upscale could not be found."},"500":{"description":"Internal Server Error. An unexpected error occurred."}},"security":[{"bearer":[]}],"summary":"Get upscale details","tags":["upscale"]},"delete":{"description":"Deletes an existing upscale request.\n\nPath Parameters:\n- id: UUID of the upscale to delete","operationId":"upscale_delete","parameters":[{"name":"id","required":true,"in":"path","description":"The unique identifier of the upscale to delete","schema":{"format":"uuid","type":"string"}}],"responses":{"204":{"description":"The upscale was successfully deleted."},"400":{"description":"Bad Request. The request parameters are invalid."},"401":{"description":"Unauthorized. The user is not authenticated."},"404":{"description":"Not Found. The upscale to delete could not be found."},"422":{"description":"Unprocessable Entity. Invalid request parameters."},"500":{"description":"Internal Server Error. An unexpected error occurred."}},"security":[{"bearer":[]}],"summary":"Delete an upscale","tags":["upscale"]}},"/user-images":{"post":{"description":"Creates a new image or video entry and generates an upload URL.\n\nSupported formats:\n- Images: jpg, jpeg, png, gif, webp\n- Videos: mp4, webm, mov, avi\n\nThe response includes an 'uploadUrl' property which is a pre-signed S3 URL that can be used to upload the file.\n\nTo upload the file:\n1. Make a PUT request to the uploadUrl with the file as the request body\n2. Set the Content-Type header to match the file type (e.g., 'image/jpeg', 'image/png', 'video/mp4', 'video/webm')\n3. No authentication is required for this PUT request as the URL is pre-signed\n\nExample uploading an image using curl:\n```\ncurl -X PUT -H \"Content-Type: image/jpeg\" --data-binary \"@/path/to/image.jpg\" \"https://pre-signed-url-from-response\"\n```\n\nExample uploading a video using curl:\n```\ncurl -X PUT -H \"Content-Type: video/mp4\" --data-binary \"@/path/to/video.mp4\" \"https://pre-signed-url-from-response\"\n```\n\nExample using JavaScript fetch:\n```javascript\nconst response = await fetch(uploadUrl, {\n  method: 'PUT',\n  headers: {\n    'Content-Type': 'video/mp4' // or 'image/jpeg', etc.\n  },\n  body: file // File or Blob object\n});\n```\n\nAfter successful upload, the file will be accessible via the 'imageUrl' property in the response.","operationId":"user_image_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserImageRequest"}}}},"responses":{"201":{"description":"The user image asset record was successfully created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserImageDto"}}}},"400":{"description":"Invalid request parameters"},"401":{"description":"Unauthorized. The user is not authenticated"},"402":{"description":"Payment Required. Insufficient credit balance."},"404":{"description":"Not Found. The requested resource could not be found."},"422":{"description":"Unprocessable Entity. The request payload contains invalid data."},"429":{"description":"Too Many Requests. Please try again later."},"500":{"description":"Internal Server Error. An unexpected error occurred."}},"security":[{"bearer":[]}],"summary":"Create a new user image or video","tags":["user-images"]},"get":{"description":"Returns a list of images and videos uploaded by the authenticated user.\n\nThe list is sorted by creation date in descending order, with a maximum of 100 items per page.","operationId":"user_image_list","parameters":[],"responses":{"200":{"description":"List of user images and videos retrieved successfully","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/UserImageDto"}}}}},"400":{"description":"Invalid request parameters"},"401":{"description":"Unauthorized. The user is not authenticated"},"422":{"description":"Unprocessable Entity. Invalid request parameters"},"429":{"description":"Too Many Requests. Please try again later"},"500":{"description":"Internal Server Error. An unexpected error occurred"}},"security":[{"bearer":[]}],"summary":"List user images and videos","tags":["user-images"]}},"/user-images/{id}":{"get":{"description":"Returns details of a specific image or video from your library.\n\nPath Parameters:\n- id: UUID of the file","operationId":"user_image_get","parameters":[{"name":"id","required":true,"in":"path","description":"File ID","schema":{"format":"uuid","type":"string"}}],"responses":{"200":{"description":"The user image or video was successfully retrieved","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserImageDto"}}}},"400":{"description":"Invalid file ID format"},"401":{"description":"Unauthorized. The user is not authenticated"},"404":{"description":"Not Found. The requested file could not be found"},"422":{"description":"Unprocessable Entity. Invalid request parameters"},"429":{"description":"Too Many Requests. Please try again later"},"500":{"description":"Internal Server Error. An unexpected error occurred"}},"security":[{"bearer":[]}],"summary":"Get a user image or video","tags":["user-images"]},"delete":{"description":"Deletes a user image from your library.\n\nPath Parameters:\n- id: UUID of the image to delete","operationId":"user_image_delete","parameters":[{"name":"id","required":true,"in":"path","description":"Image ID","schema":{"format":"uuid","type":"string"}}],"responses":{"204":{"description":"The image was successfully deleted"},"400":{"description":"Invalid image ID format"},"401":{"description":"Unauthorized. The user is not authenticated"},"404":{"description":"Not Found. The image to delete could not be found"},"422":{"description":"Unprocessable Entity. Invalid request parameters"},"500":{"description":"Internal Server Error. An unexpected error occurred while deleting the image"}},"security":[{"bearer":[]}],"summary":"Delete a user image","tags":["user-images"]}},"/user-assets":{"post":{"description":"Creates a new asset entry and generates an upload URL.\n\nSupported formats:\n- Images: jpg, jpeg, png, gif, webp\n- Videos: mp4, webm, mov, avi\n- Audio: mp3, wav, ogg, m4a, aac, flac\n\nThe response includes an 'uploadUrl' property which is a pre-signed S3 URL that can be used to upload the file.\n\nTo upload the file:\n1. Make a PUT request to the uploadUrl with the file as the request body\n2. Set the Content-Type header to match the file type (e.g., 'image/jpeg', 'video/mp4', 'audio/mpeg')\n3. No authentication is required for this PUT request as the URL is pre-signed\n\nExample uploading an image using curl:\n```\ncurl -X PUT -H \"Content-Type: image/jpeg\" --data-binary \"@/path/to/image.jpg\" \"https://pre-signed-url-from-response\"\n```\n\nExample uploading a video using curl:\n```\ncurl -X PUT -H \"Content-Type: video/mp4\" --data-binary \"@/path/to/video.mp4\" \"https://pre-signed-url-from-response\"\n```\n\nExample uploading an audio file using curl:\n```\ncurl -X PUT -H \"Content-Type: audio/mpeg\" --data-binary \"@/path/to/audio.mp3\" \"https://pre-signed-url-from-response\"\n```\n\nExample using JavaScript fetch:\n```javascript\nconst response = await fetch(uploadUrl, {\n  method: 'PUT',\n  headers: {\n    'Content-Type': 'audio/mpeg' // or 'image/jpeg', 'video/mp4', etc.\n  },\n  body: file // File or Blob object\n});\n```\n\nAfter successful upload, the file will be accessible via the 'imageUrl' property in the response.","operationId":"user_asset_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserAssetRequest"}}}},"responses":{"201":{"description":"The user asset record was successfully created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserAssetDto"}}}},"400":{"description":"Invalid request parameters"},"401":{"description":"Unauthorized. The user is not authenticated"},"402":{"description":"Payment Required. Insufficient credit balance."},"404":{"description":"Not Found. The requested resource could not be found."},"422":{"description":"Unprocessable Entity. The request payload contains invalid data."},"429":{"description":"Too Many Requests. Please try again later."},"500":{"description":"Internal Server Error. An unexpected error occurred."}},"security":[{"bearer":[]}],"summary":"Create a new user asset (image, video, or audio)","tags":["user-assets"]},"get":{"description":"Returns a list of images and videos uploaded by the authenticated user.\n\nThe list is sorted by creation date in descending order, with a maximum of 100 items per page.","operationId":"user_asset_list","parameters":[],"responses":{"200":{"description":"List of user assets (images and videos) retrieved successfully","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/UserAssetDto"}}}}},"400":{"description":"Invalid request parameters"},"401":{"description":"Unauthorized. The user is not authenticated"},"422":{"description":"Unprocessable Entity. Invalid request parameters"},"429":{"description":"Too Many Requests. Please try again later"},"500":{"description":"Internal Server Error. An unexpected error occurred"}},"security":[{"bearer":[]}],"summary":"List user assets (images and videos)","tags":["user-assets"]}},"/user-assets/{id}":{"get":{"description":"Returns details of a specific image or video from your library.\n\nPath Parameters:\n- id: UUID of the file","operationId":"user_asset_get","parameters":[{"name":"id","required":true,"in":"path","description":"File ID","schema":{"format":"uuid","type":"string"}}],"responses":{"200":{"description":"The user asset (image or video) was successfully retrieved","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserAssetDto"}}}},"400":{"description":"Invalid file ID format"},"401":{"description":"Unauthorized. The user is not authenticated"},"404":{"description":"Not Found. The requested file could not be found"},"422":{"description":"Unprocessable Entity. Invalid request parameters"},"429":{"description":"Too Many Requests. Please try again later"},"500":{"description":"Internal Server Error. An unexpected error occurred"}},"security":[{"bearer":[]}],"summary":"Get a user asset (image or video)","tags":["user-assets"]},"patch":{"description":"Updates editable fields of a user asset from your library. Currently supports caption updates.","operationId":"public_user_asset_update","parameters":[{"name":"id","required":true,"in":"path","description":"Asset ID","schema":{"format":"uuid","type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserAssetUpdateRequest"}}}},"responses":{"200":{"description":"The asset was successfully updated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserAssetDto"}}}},"400":{"description":"Invalid request parameters"},"401":{"description":"Unauthorized. The user is not authenticated"},"403":{"description":"Forbidden. User does not have permission to update this asset"},"404":{"description":"Not Found. The asset to update could not be found"},"422":{"description":"Unprocessable Entity. Invalid request parameters"},"500":{"description":"Internal Server Error. An unexpected error occurred while updating the asset"}},"security":[{"bearer":[]}],"summary":"Update a user asset","tags":["user-assets"]},"delete":{"description":"Deletes a user asset from your library.\n\nPath Parameters:\n- id: UUID of the asset to delete","operationId":"user_asset_delete","parameters":[{"name":"id","required":true,"in":"path","description":"Asset ID","schema":{"format":"uuid","type":"string"}}],"responses":{"204":{"description":"The asset was successfully deleted"},"400":{"description":"Invalid asset ID format"},"401":{"description":"Unauthorized. The user is not authenticated"},"404":{"description":"Not Found. The asset to delete could not be found"},"422":{"description":"Unprocessable Entity. Invalid request parameters"},"500":{"description":"Internal Server Error. An unexpected error occurred while deleting the asset"}},"security":[{"bearer":[]}],"summary":"Delete a user asset","tags":["user-assets"]}},"/videos":{"get":{"description":"Retrieves a paginated list of videos.\n\nOptional Query Parameters:\n- page: Page number (default: 1)\n- limit: Items per page (1-50, default: 10)\n- sortBy: Field to sort by\n- sortOrder: \"ASC\" or \"DESC\"\n- userId: Filter by user ID\n- username: Filter by username\n- status: Filter by video status\n- width: Filter by video width\n- height: Filter by video height\n- resolution: Filter by video resolution\n- prompt: Filter by prompt text\n- hidePrompt: Filter by hidden prompts","operationId":"public_video_list","parameters":[{"name":"page","required":false,"in":"query","description":"Page number","schema":{"default":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Number of items per page","schema":{"default":10,"type":"number"}},{"name":"sortBy","required":false,"in":"query","description":"Field to sort by","schema":{"type":"string"}},{"name":"sortOrder","required":false,"in":"query","description":"Sort order (case insensitive)","schema":{"example":"ASC","type":"string","enum":["ASC","DESC","asc","desc"]}},{"name":"userId","required":false,"in":"query","description":"Filter by user ID","schema":{"type":"string"}},{"name":"username","required":false,"in":"query","description":"Filter by username","schema":{"type":"string"}},{"name":"organizationId","required":false,"in":"query","description":"Filter by organization ID","schema":{"type":"string"}},{"name":"originalImageCompletionId","required":false,"in":"query","description":"Filter by original image completion ID","schema":{"type":"string"}},{"name":"prompt","required":false,"in":"query","description":"Filter by prompt text","schema":{"type":"string"}},{"name":"status","required":false,"in":"query","description":"Filter by video status","schema":{"type":"string","enum":["new","generating","ready","saved","failed","interrupted"]}},{"name":"width","required":false,"in":"query","description":"Filter by width","schema":{"type":"number"}},{"name":"height","required":false,"in":"query","description":"Filter by height","schema":{"type":"number"}},{"name":"resolution","required":false,"in":"query","description":"Filter by resolution","schema":{"type":"number"}},{"name":"isNsfw","required":false,"in":"query","description":"Filter by NSFW content","schema":{"type":"boolean"}},{"name":"isHot","required":false,"in":"query","description":"Filter by hot content","schema":{"type":"boolean"}},{"name":"isUnsafe","required":false,"in":"query","description":"Filter by unsafe content","schema":{"type":"boolean"}},{"name":"hidePrompt","required":false,"in":"query","description":"Filter by hidden prompts","schema":{"type":"boolean"}},{"name":"modelIds","required":false,"in":"query","description":"Array of model IDs to filter by","schema":{"type":"array","items":{"type":"string"}}},{"description":"Page number","required":false,"name":"page","in":"query","schema":{"default":1,"type":"number"}},{"description":"Number of items per page","required":false,"name":"limit","in":"query","schema":{"default":10,"type":"number"}},{"description":"Field to sort by","required":false,"name":"sortBy","in":"query","schema":{"type":"string"}},{"description":"Sort order (case insensitive)","required":false,"name":"sortOrder","in":"query","schema":{"example":"ASC","type":"string"}},{"description":"Filter by user ID","required":false,"name":"userId","in":"query","schema":{"type":"string"}},{"description":"Filter by username","required":false,"name":"username","in":"query","schema":{"type":"string"}},{"description":"Filter by organization ID","required":false,"name":"organizationId","in":"query","schema":{"type":"string"}},{"description":"Filter by original image completion ID","required":false,"name":"originalImageCompletionId","in":"query","schema":{"type":"string"}},{"description":"Filter by prompt text","required":false,"name":"prompt","in":"query","schema":{"type":"string"}},{"description":"Filter by video status","required":false,"name":"status","in":"query","schema":{"type":"string"}},{"description":"Filter by width","required":false,"name":"width","in":"query","schema":{"type":"number"}},{"description":"Filter by height","required":false,"name":"height","in":"query","schema":{"type":"number"}},{"description":"Filter by resolution","required":false,"name":"resolution","in":"query","schema":{"type":"number"}},{"description":"Filter by NSFW content","required":false,"name":"isNsfw","in":"query","schema":{"type":"boolean"}},{"description":"Filter by hot content","required":false,"name":"isHot","in":"query","schema":{"type":"boolean"}},{"description":"Filter by unsafe content","required":false,"name":"isUnsafe","in":"query","schema":{"type":"boolean"}},{"description":"Filter by hidden prompts","required":false,"name":"hidePrompt","in":"query","schema":{"type":"boolean"}},{"description":"Array of model IDs to filter by","required":false,"name":"modelIds","in":"query","schema":{"type":"array","items":{"type":"string"}}}],"responses":{"200":{"description":"Paginated list of videos","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/VideoDto"}}}}},"400":{"description":"Bad Request. Possible reasons:\n\n      - Pagination parameters (page, limit) must be positive integers between 1 and 50.\n      - Sort parameters (sortBy, sortOrder) must be valid values.\n      - Filter parameters must be valid values.\n      - userId: Must be a valid UUID.\n      - username: Must be a valid username.\n      - status: Must be a valid video status.\n      - width/height/resolution: Must be valid numbers.\n    "},"401":{"description":"Unauthorized. Authentication token is missing or invalid."},"500":{"description":"Internal Server Error. An unexpected error occurred while retrieving videos."}},"security":[{"bearer":[]}],"summary":"List videos (public API)","tags":["videos"]},"post":{"description":"Creates a new video generation request.\n\nRequired Parameters:\n- prompt: Text description for the video\n\nInput Source (Optional):\n- originalImageCompletionId, imageUrl, or imageUrls can be provided for image-to-video flows\n- If none are provided, text-to-video generation is used\n\nOptional Parameters:\n- assetUrls: Additional input asset URLs used by some video models\n- organizationId: Organization ID for organization accounts\n- width: Video width in pixels\n- height: Video height in pixels\n- resolution: Video resolution\n- baseModel: Base model identifier for video generation (max 255 characters)\n- webhookUrl: URL to receive progress notifications\n- hidePrompt: Whether to hide prompt in public listings (default: false)\n- settings: Additional generation settings\n\nAuthentication: Requires valid JWT token.\n\nRate Limits: Subject to user account limits.","operationId":"public_video_create","parameters":[],"requestBody":{"required":true,"description":"Video creation request parameters","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicVideoRequest"}}}},"responses":{"201":{"description":"Video creation request submitted successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VideoDto"}}}},"400":{"description":"Bad Request. Possible reasons:\n\n      - Missing required field (prompt)\n      - Invalid field values or formats\n      - Invalid UUID format for originalImageCompletionId or organizationId\n      - Invalid URL format for imageUrl or webhookUrl\n      - Width, height, resolution must be positive integers\n      - Settings must be a valid object\n    "},"401":{"description":"Unauthorized. Valid JWT token required."},"402":{"description":"Payment Required. Insufficient credit balance."},"404":{"description":"Not Found. Referenced originalImageCompletionId does not exist."},"429":{"description":"Too Many Requests. Rate limit exceeded."},"500":{"description":"Internal Server Error. An unexpected error occurred during video creation."}},"security":[{"bearer":[]}],"summary":"Create a new video (public API)","tags":["videos"]}},"/videos/{id}":{"get":{"description":"Retrieves a specific video by its UUID.\n\nRequired Parameters:\n- id: UUID of the video","operationId":"public_video_get","parameters":[{"name":"id","required":true,"in":"path","description":"UUID of the video to retrieve.","schema":{"type":"string"}}],"responses":{"200":{"description":"Returns the video with the specified ID.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VideoDto"}}}},"400":{"description":"Bad Request. Possible reasons:\n\n      - id: Must be a valid UUID.\n      - Invalid or unavailable parameters.\n    "},"401":{"description":"Unauthorized. Authentication token is missing or invalid."},"404":{"description":"Not Found. Video with the specified ID does not exist."},"500":{"description":"Internal Server Error. An unexpected error occurred while retrieving the video."}},"security":[{"bearer":[]}],"summary":"Get video by ID (public API)","tags":["videos"]}},"/videos/{id}/privacy":{"put":{"description":"Changes the privacy settings of a video.\n\nPath Parameters:\n- id: UUID of the video\n\nRequest Body:\n- privacy: New privacy level (public, private, organization)\n\nThis endpoint only works for videos owned by the authenticated user.","operationId":"public_videos_privacy_change","parameters":[{"name":"id","required":true,"in":"path","description":"The unique identifier of the video to update","schema":{"format":"uuid","type":"string"}}],"requestBody":{"required":true,"description":"Privacy update parameters.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VideoPrivacyRequest"}}}},"responses":{"204":{"description":"Video privacy updated successfully"},"400":{"description":"Bad Request. Invalid video ID or parameters"},"401":{"description":"Unauthorized. Authentication required"},"404":{"description":"Not Found. The video could not be found"},"500":{"description":"Internal Server Error. Unexpected error occurred"}},"security":[{"bearer":[]}],"summary":"Update video privacy","tags":["videos"]}},"/videos/{id}/prompt-privacy":{"put":{"description":"Changes the prompt privacy settings of a video.\n\nPath Parameters:\n- id: UUID of the video\n\nRequest Body:\n- hidePrompt: Boolean indicating if the prompt should be hidden\n\nThis endpoint only works for videos owned by the authenticated user.","operationId":"public_videos_prompt_privacy_change","parameters":[{"name":"id","required":true,"in":"path","description":"The unique identifier of the video to update","schema":{"format":"uuid","type":"string"}}],"requestBody":{"required":true,"description":"Prompt privacy update parameters.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VideoPromptPrivacyRequest"}}}},"responses":{"204":{"description":"Video prompt privacy updated successfully"},"400":{"description":"Bad Request. Invalid video ID or parameters"},"401":{"description":"Unauthorized. Authentication required"},"404":{"description":"Not Found. The video could not be found"},"500":{"description":"Internal Server Error. Unexpected error occurred"}},"security":[{"bearer":[]}],"summary":"Update video prompt privacy","tags":["videos"]}}},"info":{"title":"LetzAI API","description":"","version":"1.0","contact":{}},"tags":[],"servers":[{"url":"https://api.letz.ai"}],"components":{"securitySchemes":{"Bearer":{"scheme":"bearer","bearerFormat":"JWT","type":"http","description":"Authentication via Bearer token: provide a user integration token or an organization integration token."}},"schemas":{"BoardCreateRequest":{"type":"object","properties":{"name":{"type":"string","description":"Name of the board"},"description":{"type":"string","description":"Description of the board"},"visibility":{"type":"string","enum":["public","private","hidden"],"description":"Defaults to `public` when omitted"},"safety":{"type":"string","enum":["nsfw","sfw"],"description":"Defaults to `sfw` when omitted"},"challengeDeadline":{"type":"string","format":"date-time","example":"2026-12-31T23:59:59.000Z","description":"ISO date string for the challenge deadline"}},"required":["name"]},"PublicUserDto":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"username":{"type":"string"},"profilePicture":{"type":"string"},"description":{"type":"string"},"website":{"type":"string"},"socialMediaAccounts":{"type":"object"},"imagesGenerated":{"type":"number"},"imagesAvailable":{"type":"number"},"videosGenerated":{"type":"number"},"videosPublished":{"type":"number"},"imagesEdited":{"type":"number"},"editedImagesPublished":{"type":"number"},"modelsTrained":{"type":"number"},"modelsAvailable":{"type":"number"},"followersCount":{"type":"number"},"followingCount":{"type":"number"},"isVerified":{"type":"boolean"}},"required":["id","name","username","profilePicture","description","website","socialMediaAccounts","imagesGenerated","imagesAvailable","videosGenerated","videosPublished","imagesEdited","editedImagesPublished","modelsTrained","modelsAvailable","followersCount","followingCount","isVerified"]},"BoardVisibility":{"type":"string","enum":["public","private","hidden"]},"BoardSafety":{"type":"string","enum":["nsfw","sfw"]},"BoardDto":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"description":{"type":"string","nullable":true},"challengeDeadline":{"type":"string","nullable":true,"format":"date-time"},"thumbnail":{"type":"object","nullable":true,"additionalProperties":{"type":"string"},"description":"Thumbnail image versions keyed by size, e.g. `original`, `640x640`, `240x240`, `96x96`. Absent while the board has no thumbnail.","example":{"original":"https://images.letz.ai/path/image.jpg","96x96":"https://images.letz.ai/path/image_96x96.jpg"}},"members":{"type":"number","description":"Number of approved members."},"owner":{"$ref":"#/components/schemas/PublicUserDto"},"isActive":{"type":"boolean"},"isMember":{"type":"boolean","description":"Whether the authenticated user is a member of the board. Only set when the request is authenticated."},"isAdmin":{"type":"boolean","description":"Whether the authenticated user owns or administers the board. Only set when the request is authenticated."},"visibility":{"allOf":[{"$ref":"#/components/schemas/BoardVisibility"}]},"safety":{"allOf":[{"$ref":"#/components/schemas/BoardSafety"}]},"createdAt":{"format":"date-time","type":"string"},"updatedAt":{"format":"date-time","type":"string"}},"required":["id","name","members","owner","isActive","visibility","safety","createdAt","updatedAt"]},"BoardFeedItemType":{"type":"string","enum":["image","video"],"description":"Which of `image` and `video` is set on this item."},"ModelVersionDto":{"type":"object","properties":{"id":{"type":"string"},"version":{"type":"number"},"storagePath":{"type":"string"},"systemVersions":{"type":"array","items":{"type":"string"}},"status":{"type":"string"},"createdAt":{"format":"date-time","type":"string"},"trainedAt":{"format":"date-time","type":"string"}},"required":["id","version","storagePath","systemVersions","status","createdAt","trainedAt"]},"PublicOrganizationDto":{"type":"object","properties":{}},"ModelOrganizationDto":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier of the model-organization relationship","example":"123e4567-e89b-12d3-a456-426614174000"},"organization":{"description":"Organization that has access to the model","allOf":[{"$ref":"#/components/schemas/PublicOrganizationDto"}]},"sharedByUser":{"description":"User who shared the model with the organization","allOf":[{"$ref":"#/components/schemas/PublicUserDto"}]},"createdAt":{"format":"date-time","type":"string","description":"Date when the model was shared","example":"2024-01-15T10:30:00Z"},"updatedAt":{"format":"date-time","type":"string","description":"Date when the sharing was last updated","example":"2024-01-15T10:30:00Z"}},"required":["id","organization","createdAt","updatedAt"]},"ModelDto":{"type":"object","properties":{"id":{"type":"string"},"user":{"$ref":"#/components/schemas/PublicUserDto"},"userId":{"type":"string"},"name":{"type":"string"},"username":{"type":"string"},"class":{"type":"string"},"type":{"type":"string"},"description":{"type":"string"},"website":{"type":"string"},"status":{"type":"string"},"statusDetail":{"type":"string"},"progress":{"type":"number"},"privacy":{"type":"string"},"usages":{"type":"number"},"imagesAvailable":{"type":"number"},"likes":{"type":"number"},"version":{"type":"number"},"thumbnail":{"type":"string"},"thumbnailOptions":{"type":"object"},"settings":{"type":"object"},"images":{"type":"object"},"isActive":{"type":"boolean"},"blockedAt":{"format":"date-time","type":"string"},"createdAt":{"format":"date-time","type":"string"},"systemVersions":{"type":"array","items":{"type":"string"}},"versions":{"type":"array","items":{"$ref":"#/components/schemas/ModelVersionDto"}}},"required":["id","user","userId","name","username","class","type","description","website","status","statusDetail","progress","privacy","usages","imagesAvailable","likes","version","thumbnail","thumbnailOptions","settings","images","isActive","blockedAt","createdAt","systemVersions","versions"]},"ApiKeyEntryDto":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"key":{"type":"string"},"active":{"type":"boolean"}},"required":["id","name","key","active"]},"ImageCompletionDto":{"type":"object","properties":{"id":{"type":"string"},"user":{"$ref":"#/components/schemas/PublicUserDto"},"userId":{"type":"string"},"organizationId":{"type":"string","description":"Organization ID billed for this generation"},"regeneratedFromId":{"type":"string"},"originalImageCompletions":{"description":"Original image completions","type":"array","items":{"$ref":"#/components/schemas/ImageCompletionDto"}},"originalImageCompletion":{"description":"Original image completion (top level)","allOf":[{"$ref":"#/components/schemas/ImageCompletionDto"}]},"originalImageCompletionIds":{"description":"Original image completion IDs","type":"array","items":{"type":"string"}},"imageEdit":{"$ref":"#/components/schemas/ImageEditDto"},"prompt":{"type":"string"},"baseModel":{"type":"string"},"promptSystem":{"type":"string"},"autocaption":{"type":"string","description":"Machine generated caption describing the image","nullable":true},"status":{"type":"string"},"statusDetail":{"type":"string"},"progress":{"type":"number"},"previewImage":{"type":"string"},"username":{"type":"string"},"queue":{"type":"string"},"isUserVerified":{"type":"boolean"},"isHot":{"type":"boolean"},"privacy":{"type":"string"},"likes":{"type":"number"},"comments":{"type":"number"},"liked":{"type":"boolean"},"regenerations":{"type":"number"},"reports":{"type":"number"},"storageBucket":{"type":"string"},"storagePath":{"type":"string"},"generationSettings":{"type":"object"},"generationData":{"type":"string"},"generatedByUnit":{"type":"string"},"generationSeconds":{"type":"number"},"imagePaths":{"type":"object"},"imageVersions":{"type":"object"},"systemVersion":{"type":"number"},"hasWatermark":{"type":"boolean"},"isNsfw":{"type":"boolean"},"webhookUrl":{"type":"string"},"isBookmarked":{"type":"boolean"},"isUnsafe":{"type":"boolean"},"hidePrompt":{"type":"boolean"},"blockedAt":{"format":"date-time","type":"string"},"createdAt":{"format":"date-time","type":"string"},"deletedAt":{"format":"date-time","type":"string","description":"Internal only"},"updatedAt":{"format":"date-time","type":"string","description":"Internal only"},"isActive":{"type":"boolean","description":"Internal only"},"models":{"type":"array","items":{"$ref":"#/components/schemas/ModelDto"}},"modelId":{"type":"string","description":"Primary model ID used for generation (first model)","example":"550e8400-e29b-41d4-a716-446655440000"},"apiKey":{"type":"string","description":"Organization API key (only included on creation)"},"apiKeys":{"description":"Organization API keys (only included on creation)","type":"array","items":{"$ref":"#/components/schemas/ApiKeyEntryDto"}},"userApiKeys":{"description":"User API keys (only included on creation)","type":"array","items":{"$ref":"#/components/schemas/ApiKeyEntryDto"}}},"required":["id","user","userId","regeneratedFromId","originalImageCompletions","originalImageCompletion","originalImageCompletionIds","imageEdit","prompt","baseModel","promptSystem","status","statusDetail","progress","previewImage","username","queue","isUserVerified","isHot","privacy","likes","comments","liked","regenerations","reports","storageBucket","storagePath","generationSettings","generationData","generatedByUnit","generationSeconds","imagePaths","imageVersions","systemVersion","hasWatermark","isNsfw","webhookUrl","isBookmarked","isUnsafe","hidePrompt","blockedAt","createdAt","models"]},"ImageEditDto":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the image edit"},"originalImageCompletions":{"description":"Original image completions","type":"array","items":{"$ref":"#/components/schemas/ImageCompletionDto"}},"originalImageCompletion":{"description":"Original image completion (top level)","allOf":[{"$ref":"#/components/schemas/ImageCompletionDto"}]},"originalImageCompletionIds":{"description":"Original image completion IDs","type":"array","items":{"type":"string"}},"originalImageEdit":{"description":"Source image completion of the edit","allOf":[{"$ref":"#/components/schemas/ImageEditDto"}]},"generatedImageCompletion":{"description":"Generated image completion","allOf":[{"$ref":"#/components/schemas/ImageCompletionDto"}]},"imageCompletionChoices":{"description":"Generated image completion choices","type":"array","items":{"type":"string"}},"mode":{"type":"string","description":"Edit mode (max 32 characters)","nullable":true},"width":{"type":"number","description":"Width of the edited image"},"height":{"type":"number","description":"Height of the edited image"},"imageCompletionsCount":{"type":"number","description":"Number of image completions to be generated"},"prompt":{"type":"string","description":"Prompt"},"baseModel":{"type":"string","description":"Base model identifier used for generation"},"mask":{"type":"string","description":"Inpainting mask"},"inputImageUrls":{"description":"Input image URLs","type":"array","items":{"type":"string"}},"imageUrl":{"type":"string","description":"Input image URL"},"webhookUrl":{"type":"string","description":"Webhook URL"},"settings":{"type":"object"},"models":{"type":"array","items":{"$ref":"#/components/schemas/ModelDto"}},"status":{"type":"string","description":"Status of the image edit process"},"statusDetail":{"type":"string","description":"Detailed worker status/error message"},"progress":{"type":"number","description":"Progress of the image edit process (0-100)"},"generationSeconds":{"type":"number","description":"Generation time in seconds. If provided, overrides the default fixed credit cost."},"hidePrompt":{"type":"boolean"},"apiKey":{"type":"string","description":"Organization API key (only included on creation)"},"apiKeys":{"description":"Organization API keys (only included on creation)","type":"array","items":{"$ref":"#/components/schemas/ApiKeyEntryDto"}},"userApiKeys":{"description":"User API keys (only included on creation)","type":"array","items":{"$ref":"#/components/schemas/ApiKeyEntryDto"}}},"required":["id","originalImageCompletions","originalImageCompletion","originalImageCompletionIds","originalImageEdit","generatedImageCompletion","imageCompletionChoices","mode","width","height","imageCompletionsCount","prompt","baseModel","mask","inputImageUrls","imageUrl","webhookUrl","settings","models","progress","hidePrompt"]},"ImageDto":{"type":"object","properties":{"id":{"type":"string"},"user":{"$ref":"#/components/schemas/PublicUserDto"},"organizationId":{"type":"string","description":"Organization UUID used for credit deduction"},"imageEdit":{"$ref":"#/components/schemas/ImageEditDto"},"prompt":{"type":"string"},"baseModel":{"type":"string"},"autocaption":{"type":"string","description":"Machine generated caption describing the image","nullable":true},"status":{"type":"string"},"statusDetail":{"type":"string"},"progressMessage":{"type":"string"},"progress":{"type":"number"},"previewImage":{"type":"string"},"isHot":{"type":"boolean"},"privacy":{"type":"string"},"likes":{"type":"number"},"regenerations":{"type":"number"},"imageVersions":{"type":"object"},"systemVersion":{"type":"number"},"hasWatermark":{"type":"boolean"},"generationSettings":{"type":"object"},"isNsfw":{"type":"boolean"},"webhookUrl":{"type":"string"},"hidePrompt":{"type":"boolean"},"createdAt":{"format":"date-time","type":"string"},"models":{"type":"array","items":{"$ref":"#/components/schemas/ModelDto"}}},"required":["id","user","imageEdit","prompt","baseModel","status","progressMessage","progress","previewImage","isHot","privacy","likes","regenerations","imageVersions","systemVersion","hasWatermark","generationSettings","isNsfw","webhookUrl","hidePrompt","createdAt","models"]},"VideoCutDto":{"type":"object","properties":{"index":{"type":"number","description":"0-based cut index","example":1},"start":{"type":"number","description":"Start time in seconds","example":3.7083},"end":{"type":"number","description":"End time in seconds","example":12.4167},"duration":{"type":"number","description":"Denormalized end - start, in seconds","example":8.7084},"score":{"type":"number","description":"Detector confidence for the boundary that opens this cut (ffmpeg lavfi.scene_score, 0..1). Absent for index 0.","example":0.2692},"clipUrl":{"type":"string","description":"CDN URL of the extracted clip for this cut, when one has been produced"}},"required":["index","start","end"]},"VideoCutsMetaDto":{"type":"object","properties":{"detector":{"type":"string","description":"Detector that produced the cut list","enum":["ffmpeg-scene","manual"]},"detectorVersion":{"type":"string","description":"Detector version"},"threshold":{"type":"number","description":"Scene score threshold used"},"minSegment":{"type":"number","description":"Minimum segment length in seconds"},"maxCuts":{"type":"number","description":"Maximum number of cuts kept"},"detectedAt":{"type":"string","description":"ISO-8601 detection timestamp"},"status":{"type":"string","description":"Detection lifecycle state","enum":["pending","ready","failed","skipped"]},"error":{"type":"string","description":"Failure reason when status is \"failed\""}}},"VideoCutClipDto":{"type":"object","properties":{"index":{"type":"number","description":"0-based index of the cut this clip covers"},"status":{"type":"string","description":"Extraction state","enum":["pending","ready","failed"]},"url":{"type":"string","description":"CDN URL, once ready"},"filename":{"type":"string","description":"Suggested download filename"},"sizeBytes":{"type":"number","description":"Clip size in bytes"},"error":{"type":"string","description":"Failure reason when status is \"failed\""}},"required":["index","status"]},"VideoCutReviewDto":{"type":"object","properties":{"videoId":{"type":"string","description":"Video the review belongs to"},"cutsRevision":{"type":"number","description":"The video.cutsRevision these marks describe","example":1},"marks":{"type":"array","description":"Marks positionally aligned with cuts[]; null means not yet reviewed","nullable":true,"example":["green",null,"red"],"items":{"type":"string","enum":["red","orange","green"]}},"reviewedCount":{"type":"number","description":"How many cuts carry a mark","example":2},"revision":{"type":"number","description":"Optimistic-concurrency counter; 0 means the video was never reviewed","example":4},"updatedAt":{"format":"date-time","type":"string","description":"When the review was last written"}},"required":["videoId","cutsRevision","marks","reviewedCount","revision"]},"VideoDto":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the video animation"},"user":{"description":"User who created the video","allOf":[{"$ref":"#/components/schemas/PublicUserDto"}]},"userId":{"type":"string","description":"User ID of the video creator"},"organizationId":{"type":"string","description":"Organization ID billed for this generation"},"regeneratedFromId":{"type":"string","description":"ID of the video this was regenerated from"},"originalImageCompletion":{"description":"Original image completion being animated","allOf":[{"$ref":"#/components/schemas/ImageCompletionDto"}]},"originalImageCompletionId":{"type":"string","description":"Original image completion ID"},"prompt":{"type":"string","description":"Video animation prompt"},"prompts":{"type":"array","description":"Array of prompt objects for multi-scene videos","items":{"type":"object"}},"promptSystem":{"type":"string","description":"System prompt for video generation"},"autocaption":{"type":"string","description":"Machine generated caption describing the video","nullable":true},"baseModel":{"type":"string","description":"Base model identifier used for video generation"},"imageUrls":{"description":"Input image URLs","type":"array","items":{"type":"string"}},"assetUrls":{"description":"Input asset URLs","type":"array","items":{"type":"string"}},"imageUrl":{"type":"string","description":"Input image URL"},"width":{"type":"number","description":"Video width in pixels"},"height":{"type":"number","description":"Video height in pixels"},"resolution":{"type":"number","description":"Video resolution"},"settings":{"type":"object","description":"Video generation settings"},"generationSettings":{"type":"object","description":"Generation settings used for the video"},"status":{"type":"string","description":"Status of the video animation process"},"statusDetail":{"type":"string","description":"Detailed status information"},"progress":{"type":"number","description":"Generation progress percentage (0-100)"},"previewImage":{"type":"string","description":"Preview image URL for the video"},"queue":{"type":"string","description":"Processing queue type"},"systemVersion":{"type":"number","description":"System version used for generation"},"generationSeconds":{"type":"number","description":"Generation time in seconds"},"videoVersions":{"type":"object","description":"Generated video file versions"},"videoPaths":{"type":"object","description":"Internal only: raw video paths"},"imageCompletionsCount":{"type":"number","description":"Internal only: image completions count"},"deletedAt":{"format":"date-time","type":"string","description":"Internal only"},"updatedAt":{"format":"date-time","type":"string","description":"Internal only"},"imageVersions":{"type":"object","description":"Generated image file versions"},"storageBucket":{"type":"string","description":"Storage bucket for video files"},"storagePath":{"type":"string","description":"Storage path for video files"},"webhookUrl":{"type":"string","description":"Webhook URL for completion notification"},"hidePrompt":{"type":"boolean","description":"Whether to hide the prompt from public view"},"hasWatermark":{"type":"boolean","description":"Whether the video has a watermark"},"likes":{"type":"number","description":"Number of likes for this video"},"comments":{"type":"number","description":"Number of comments for this video"},"regenerations":{"type":"number","description":"Number of regenerations/remixes of this video. Always 0 in practice — see VideoEntity.regenerations.","deprecated":true},"reports":{"type":"number","description":"Number of reports for inappropriate content"},"privacy":{"type":"string","description":"Privacy setting for the video"},"isNsfw":{"type":"boolean","description":"Whether the video contains NSFW content"},"isHot":{"type":"boolean","description":"Whether the video is flagged as trending/hot"},"liked":{"type":"boolean","description":"Whether the current user has liked this video"},"isUnsafe":{"type":"boolean","description":"Whether the video is flagged as unsafe content"},"isActive":{"type":"boolean","description":"Whether the video is actively available"},"hideFromUserProfile":{"type":"boolean","description":"Whether to hide the video from user profile"},"isBookmarked":{"type":"boolean","description":"Whether the current user has bookmarked this video"},"username":{"type":"string","description":"Username of the video creator"},"isUserVerified":{"type":"boolean","description":"Whether the creator is a verified user"},"publishedAt":{"format":"date-time","type":"string","description":"When the video was published/made public"},"blockedAt":{"format":"date-time","type":"string","description":"When the video was blocked (if applicable)"},"createdAt":{"format":"date-time","type":"string","description":"Creation timestamp"},"models":{"description":"Models used for video generation","type":"array","items":{"$ref":"#/components/schemas/ModelDto"}},"apiKey":{"type":"string","description":"Organization API key (only included on creation)"},"apiKeys":{"description":"Organization API keys (only included on creation)","type":"array","items":{"$ref":"#/components/schemas/ApiKeyEntryDto"}},"userApiKeys":{"description":"User API keys (only included on creation)","type":"array","items":{"$ref":"#/components/schemas/ApiKeyEntryDto"}},"thumbnailUrl":{"type":"string","description":"CDN URL of the poster frame (grabbed ~1s in)"},"durationSeconds":{"type":"number","description":"Real measured duration in seconds","example":15.093},"fps":{"type":"number","description":"Frames per second, required for frame-accurate stepping","example":23.976},"cutsStatus":{"type":"string","description":"Detection lifecycle state, mirrored from cutsMeta so clients can branch without unpacking it. Absent when the video was never analysed.","enum":["pending","ready","failed","skipped"]},"cutsRevision":{"type":"number","description":"Bumps on every (re-)detection. Review marks are keyed to it.","example":1},"cuts":{"description":"Detected shot boundaries, contiguous and covering [0, durationSeconds]. A single-shot video has exactly one cut; null means never analysed.","type":"array","items":{"$ref":"#/components/schemas/VideoCutDto"}},"cutsMeta":{"description":"Internal only: cut detection provenance","allOf":[{"$ref":"#/components/schemas/VideoCutsMetaDto"}]},"cutClips":{"description":"Per-cut clips that have been extracted or are being extracted","type":"array","items":{"$ref":"#/components/schemas/VideoCutClipDto"}},"cutReview":{"description":"The requesting user's cut review. Omitted for anonymous callers.","allOf":[{"$ref":"#/components/schemas/VideoCutReviewDto"}]}},"required":["id","user","userId","regeneratedFromId","originalImageCompletion","originalImageCompletionId","prompt","prompts","promptSystem","baseModel","imageUrls","assetUrls","imageUrl","width","height","resolution","settings","generationSettings","statusDetail","progress","previewImage","queue","systemVersion","generationSeconds","videoVersions","imageVersions","storageBucket","storagePath","webhookUrl","hidePrompt","hasWatermark","likes","comments","regenerations","reports","privacy","isNsfw","isHot","liked","isUnsafe","isActive","hideFromUserProfile","isBookmarked","username","isUserVerified","publishedAt","blockedAt","createdAt","models"]},"BoardFeedItemDto":{"type":"object","properties":{"type":{"description":"Which of `image` and `video` is set on this item.","allOf":[{"$ref":"#/components/schemas/BoardFeedItemType"}]},"likes":{"type":"number","description":"Number of likes."},"comments":{"type":"number","description":"Number of comments."},"score":{"type":"number","description":"Ranking score combining engagement and recency. Used by `sortBy=score`."},"image":{"description":"Set when `type` is `image`.","allOf":[{"$ref":"#/components/schemas/ImageDto"}]},"video":{"description":"Set when `type` is `video`.","allOf":[{"$ref":"#/components/schemas/VideoDto"}]}},"required":["type","likes","comments","score"]},"ImageRequest":{"type":"object","properties":{"prompt":{"type":"string"},"width":{"type":"number"},"height":{"type":"number"},"quality":{"type":"number"},"creativity":{"type":"number"},"hasWatermark":{"type":"boolean"},"systemVersion":{"type":"number"},"hideFromUserProfile":{"type":"boolean"},"mode":{"type":"string","enum":["default","sigma"]},"webhookUrl":{"type":"string"},"organizationId":{"type":"string","description":"Organization ID to deduct credits from. If provided, credits will be deducted from the organization account instead of the user account. User must be a member of the organization.","example":"123e4567-e89b-12d3-a456-426614174000"},"baseModel":{"type":"string","description":"Base model identifier used for generation","example":"stable-diffusion-v1"}},"required":["prompt","width","height","quality","creativity","hasWatermark","systemVersion","hideFromUserProfile","mode","webhookUrl"]},"ImagePrivacyRequest":{"type":"object","properties":{"privacy":{"type":"string","enum":["public","private","licensed"]}},"required":["privacy"]},"ImagePromptPrivacyRequest":{"type":"object","properties":{"hidePrompt":{"type":"object","default":false}},"required":["hidePrompt"]},"ImageEditRequest":{"type":"object","properties":{"originalImageCompletionIds":{"description":"Original image completion IDs","type":"array","items":{"type":"string"}},"originalImageCompletionId":{"type":"string","description":"Original image completion ID"},"imageUrl":{"type":"string","description":"Input image URL"},"mode":{"type":"string","description":"Edit mode (max 32 characters)"},"width":{"type":"number","description":"Width of the edited image"},"height":{"type":"number","description":"Height of the edited image"},"imageCompletionsCount":{"type":"number","description":"Number of image completions to generate"},"prompt":{"type":"string","description":"Prompt"},"mask":{"type":"string","description":"Inpainting mask"},"inputImageUrls":{"description":"Input image URLs","type":"array","items":{"type":"string"}},"settings":{"type":"object","additionalProperties":true},"webhookUrl":{"type":"string"},"hidePrompt":{"type":"object","default":false},"baseModel":{"type":"string","description":"Base model identifier used for generation","example":"stable-diffusion-v1"},"organizationId":{"type":"string","description":"Organization ID to deduct credits from. If provided, credits will be deducted from the organization account instead of the user account. User must be a member of the organization.","example":"123e4567-e89b-12d3-a456-426614174000"},"generationSeconds":{"type":"number","description":"Generation time in seconds used to calculate credit cost. If provided, overrides the default fixed cost for the edit mode.","example":45}},"required":["imageUrl","mode","inputImageUrls","webhookUrl","hidePrompt"]},"ImageEditMaskDto":{"type":"object","properties":{"mask":{"type":"string","description":"Inpainting mask"}},"required":["mask"]},"SettingsEnum":{"type":"string","enum":["NO_VIOLENCE","NO_HATE_SPEECH","NO_ILLEGAL_CONTENT","NO_COPYRIGHTED_CONTENT","NO_ADULT_CONTENT","NO_RELIGIOUS_CONTENT","NO_POLITICAL_CONTENT","NO_BRANDED_CONTENT","NO_OTHER"]},"ModelCreateRequest":{"type":"object","properties":{"name":{"type":"string"},"privacy":{"type":"string","enum":["public","private","licensed"]},"type":{"type":"string"},"class":{"type":"string","enum":["person","style","object"]},"description":{"type":"string"},"website":{"type":"string"},"settings":{"type":"array","example":["NO_ADULT_CONTENT","NO_VIOLENCE"],"items":{"$ref":"#/components/schemas/SettingsEnum"}},"trainingDataUrls":{"minItems":1,"maxItems":50,"type":"array","items":{"type":"string"}},"webhookUrl":{"type":"string"},"trainingMode":{"type":"string"},"organizationId":{"type":"string","description":"Organization ID to deduct credits from. If provided, credits will be deducted from the organization account instead of the user account. User must be a member of the organization.","example":"123e4567-e89b-12d3-a456-426614174000"}},"required":["name","privacy","type","class","description","website","webhookUrl","trainingMode"]},"ModelUpdateRequest":{"type":"object","properties":{"privacy":{"type":"string","enum":["public","private","licensed"]},"type":{"type":"string"},"description":{"type":"string"},"website":{"type":"string"},"settings":{"type":"array","items":{"type":"string","enum":["NO_VIOLENCE","NO_HATE_SPEECH","NO_ILLEGAL_CONTENT","NO_COPYRIGHTED_CONTENT","NO_ADULT_CONTENT","NO_RELIGIOUS_CONTENT","NO_POLITICAL_CONTENT","NO_BRANDED_CONTENT","NO_OTHER"]}},"webhookUrl":{"type":"string"}},"required":["privacy","type","description","website"]},"ModelThumbnailRequest":{"type":"object","properties":{"imageCompletionId":{"type":"string","description":"Image completion that should be used as thumbnail for the given model"}},"required":["imageCompletionId"]},"UpscaleRequest":{"type":"object","properties":{"prompt":{"type":"string"},"mode":{"type":"string","description":"Upscale mode (any string, max 32 characters)"},"size":{"type":"number"},"imageId":{"type":"string"},"imageUrl":{"type":"string"},"type":{"type":"string","enum":["image","video"],"default":"image"},"assetUrl":{"type":"string"},"assetId":{"type":"string"},"strength":{"type":"object","default":1},"webhookUrl":{"type":"string"},"organizationId":{"type":"string","description":"Organization ID to deduct credits from. If provided, credits will be deducted from the organization account instead of the user account. User must be a member of the organization.","example":"123e4567-e89b-12d3-a456-426614174000"}},"required":["prompt","size","imageId","imageUrl","strength","webhookUrl"]},"UpscaleDto":{"type":"object","properties":{"id":{"type":"string"},"user":{"$ref":"#/components/schemas/PublicUserDto"},"userId":{"type":"string"},"imageCompletionId":{"type":"string"},"imageUrl":{"type":"string"},"type":{"type":"string"},"assetUrl":{"type":"string"},"assetId":{"type":"string"},"originalImageThumbnail":{"type":"string"},"status":{"type":"string"},"mode":{"type":"string"},"statusDetail":{"type":"string"},"progress":{"type":"number"},"username":{"type":"string"},"createdByUsername":{"type":"string"},"createdByThumbnail":{"type":"string"},"isUserVerified":{"type":"boolean"},"imageVersions":{"type":"object"},"webhookUrl":{"type":"string"},"selected":{"type":"boolean"},"size":{"type":"number"},"blockedAt":{"format":"date-time","type":"string"},"createdAt":{"format":"date-time","type":"string"},"apiKey":{"type":"string","description":"Organization API key (only included on creation)"},"apiKeys":{"description":"Organization API keys (only included on creation)","type":"array","items":{"$ref":"#/components/schemas/ApiKeyEntryDto"}},"userApiKeys":{"description":"User API keys (only included on creation)","type":"array","items":{"$ref":"#/components/schemas/ApiKeyEntryDto"}}},"required":["id","user","userId","imageCompletionId","imageUrl","type","assetUrl","assetId","originalImageThumbnail","status","mode","statusDetail","progress","username","createdByUsername","createdByThumbnail","isUserVerified","imageVersions","webhookUrl","selected","size","blockedAt","createdAt"]},"UserImageRequest":{"type":"object","properties":{"extension":{"type":"string","description":"File extension of the image or video. This determines the file format that will be uploaded.","enum":["jpg","jpeg","png","gif","webp","mp4","webm","mov","avi"],"example":"jpg"},"numberOfImages":{"type":"object","description":"Number of images to generate upload URLs for. If you need to upload multiple images at once, increase this value.","default":1,"example":1},"originalFilename":{"type":"string","description":"Original filename of the image. This is stored for reference but does not affect the actual filename used in storage.","example":"my_photo.jpg"},"metadata":{"type":"object","description":"Additional metadata for the image. This can be any JSON object with custom properties you want to associate with the image.","additionalProperties":true,"example":{"title":"My vacation photo","tags":["vacation","beach"]}}},"required":["extension"]},"UserImageDto":{"type":"object","properties":{"id":{"type":"string"},"userId":{"type":"string"},"imageUrl":{"type":"string","description":"URL to access the uploaded file. This URL will be available after uploading the image or video using the uploadUrl."},"uploadUrl":{"type":"string","description":"Pre-signed S3 URL for uploading the file. Make a PUT request to this URL with the image or video as the request body and appropriate Content-Type header (e.g., image/jpeg, video/mp4)."},"originalFilename":{"type":"string"},"mimeType":{"type":"string"},"fileSize":{"type":"number"},"metadata":{"type":"object"},"createdAt":{"format":"date-time","type":"string"},"updatedAt":{"format":"date-time","type":"string"}},"required":["id","userId","imageUrl","createdAt","updatedAt"]},"UserAssetRequest":{"type":"object","properties":{"extension":{"type":"string","description":"File extension of the asset. This determines the file format that will be uploaded.","enum":["jpg","jpeg","png","gif","webp","mp4","webm","mov","avi","mp3","wav","ogg","m4a","aac","flac"],"example":"jpg"},"numberOfImages":{"type":"object","description":"Number of assets to generate upload URLs for. If you need to upload multiple files at once, increase this value.","default":1,"example":1},"originalFilename":{"type":"string","description":"Original filename of the asset. This is stored for reference but does not affect the actual filename used in storage.","example":"my_photo.jpg"},"mimeType":{"type":"string","description":"Optional MIME type for the asset (e.g., image/jpeg, video/mp4, audio/mpeg).","example":"image/jpeg"},"fileSize":{"type":"number","description":"Optional file size in bytes.","example":204800},"metadata":{"type":"object","description":"Additional metadata for the asset. This can be any JSON object with custom properties you want to associate with the file.","additionalProperties":true,"example":{"title":"My vacation photo","tags":["vacation","beach"]}},"caption":{"type":"string","description":"Optional caption associated with the asset. Works for image, video, and audio assets.","example":"Behind the scenes recording from today."}},"required":["extension"]},"UserAssetDto":{"type":"object","properties":{"id":{"type":"string"},"userId":{"type":"string"},"user":{"$ref":"#/components/schemas/PublicUserDto"},"imageUrl":{"type":"string","description":"URL to access the uploaded file. This URL will be available after uploading the image or video using the uploadUrl."},"uploadUrl":{"type":"string","description":"Pre-signed S3 URL for uploading the file. Make a PUT request to this URL with the image or video as the request body and appropriate Content-Type header (e.g., image/jpeg, video/mp4)."},"originalFilename":{"type":"string"},"mimeType":{"type":"string"},"fileSize":{"type":"number"},"metadata":{"type":"object"},"caption":{"type":"string"},"autocaption":{"type":"string","description":"Machine generated caption describing the asset","nullable":true},"createdAt":{"format":"date-time","type":"string"},"updatedAt":{"format":"date-time","type":"string"}},"required":["id","userId","user","imageUrl","createdAt","updatedAt"]},"UserAssetUpdateRequest":{"type":"object","properties":{"caption":{"type":"string","description":"Optional caption associated with the asset. Works for image, video, and audio assets.","example":"Updated caption for this asset."}}},"PublicVideoRequest":{"type":"object","properties":{"originalImageCompletionId":{"type":"string","description":"Original image completion ID to create video from","example":"123e4567-e89b-12d3-a456-426614174000"},"imageUrls":{"description":"Input image URLs","type":"array","items":{"type":"string"}},"assetUrls":{"description":"Input asset URLs (e.g. face images for Seedance)","type":"array","items":{"type":"string"}},"imageUrl":{"type":"string","description":"Image URL to create video from (alternative to originalImageCompletionId)","example":"https://example.com/image.jpg"},"organizationId":{"type":"string","description":"Organization ID (for organization accounts)","example":"123e4567-e89b-12d3-a456-426614174000"},"width":{"type":"number","description":"Width of the video","example":1024},"height":{"type":"number","description":"Height of the video","example":1024},"resolution":{"type":"number","description":"Resolution of the video","example":1024},"prompt":{"type":"string","description":"Prompt for video generation","example":"A beautiful sunset over the ocean"},"prompts":{"type":"array","description":"Array of prompt objects for multi-scene videos","items":{"type":"object"},"example":[{"prompt":"Scene 1 description","duration":3}]},"baseModel":{"type":"string","description":"Base model identifier for video generation","example":"stable-diffusion-v1"},"webhookUrl":{"type":"string","description":"Webhook URL to receive notifications about video generation progress","example":"https://your-app.com/webhook/video-complete"},"hidePrompt":{"type":"object","description":"Whether to hide the prompt in public listings","default":false,"example":false},"settings":{"type":"object","description":"Additional settings for video generation","example":{"mode":"video-kling26","withSound":false,"highQuality":true,"duration":4}}},"required":["prompt"]},"VideoPrivacyRequest":{"type":"object","properties":{"privacy":{"type":"string","enum":["public","private","licensed"]}},"required":["privacy"]},"VideoPromptPrivacyRequest":{"type":"object","properties":{"hidePrompt":{"type":"object","description":"Whether to hide the prompt from public view","default":false}},"required":["hidePrompt"]}}}}