{"openapi":"3.1.0","info":{"title":"AppHub API","description":"This documentation describes the AppHub API.","version":"0.0.1"},"servers":[{"url":"/api"}],"paths":{"/apps/catalog/{locale}":{"get":{"tags":["apps"],"summary":"List Catalogs (Compatibility)","description":"Compatibility fallback for App Store catalog browsing. Product-origin shells should prefer static /media/json/catalog_{locale}.json and use this endpoint only when the static catalog is unavailable.","operationId":"get_catalog_apps_apps_catalog__locale__get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"locale","in":"path","required":true,"schema":{"type":"string","pattern":"^(zh|en)$","description":"Language to get catalogs from","title":"Locale"},"description":"Language to get catalogs from"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AppCatalogResponse"},"title":"Response 200 Get Catalog Apps Apps Catalog Locale Get"}}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Request"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"}},"deprecated":true}},"/apps/available/{locale}":{"get":{"tags":["apps"],"summary":"List Available Apps (Compatibility)","description":"Compatibility fallback for App Store browse data. Product-origin shells should prefer static /media/json/product_{locale}.json plus /media/json/app-store-install-metadata.json and call this endpoint only when static payloads are unavailable.","operationId":"get_available_apps_apps_available__locale__get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"locale","in":"path","required":true,"schema":{"type":"string","pattern":"^(zh|en)$","description":"Language to get available apps from","title":"Locale"},"description":"Language to get available apps from"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AppAvailableResponse"},"title":"Response 200 Get Available Apps Apps Available Locale Get"}}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Request"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"}},"deprecated":true}},"/apps":{"get":{"tags":["apps"],"summary":"List Installed Apps","description":"List all installed apps","operationId":"get_apps_apps_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"endpointId","in":"query","required":false,"schema":{"type":"integer","description":"Endpoint ID to get apps from. If not set, get apps from the local endpoint","title":"Endpointid"},"description":"Endpoint ID to get apps from. If not set, get apps from the local endpoint"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AppResponse"},"title":"Response 200 Get Apps Apps Get"}}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Request"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"}}}},"/apps/{app_id}":{"get":{"tags":["apps"],"summary":"Inspect App","description":"Retrieve details about an app","operationId":"get_app_by_id_apps__app_id__get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string","description":"App ID to get details from","title":"App Id"},"description":"App ID to get details from"},{"name":"endpointId","in":"query","required":false,"schema":{"type":"integer","description":"Endpoint ID to get app details from. If not set, get details from the local endpoint","title":"Endpointid"},"description":"Endpoint ID to get app details from. If not set, get details from the local endpoint"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Request"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"}}}},"/apps/install":{"post":{"tags":["apps"],"summary":"Install App","description":"Install an app on an endpoint","operationId":"apps_install_apps_install_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"endpointId","in":"query","required":false,"schema":{"type":"integer","description":"Endpoint ID to install app on,if not set, install on the local endpoint","title":"Endpointid"},"description":"Endpoint ID to install app on,if not set, install on the local endpoint"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/appInstall"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{}}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Request"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"}}}},"/apps/{app_id}/start":{"post":{"tags":["apps"],"summary":"Start App","description":"Start an app on an endpoint","operationId":"app_start_apps__app_id__start_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string","description":"App ID to start","title":"App Id"},"description":"App ID to start"},{"name":"endpointId","in":"query","required":false,"schema":{"type":"integer","description":"Endpoint ID to start app on. If not set, start on the local endpoint","title":"Endpointid"},"description":"Endpoint ID to start app on. If not set, start on the local endpoint"}],"responses":{"204":{"description":"App started successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Request"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"}}}},"/apps/{app_id}/stop":{"post":{"tags":["apps"],"summary":"Stop App","description":"Stop an app on an endpoint","operationId":"app_stop_apps__app_id__stop_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string","description":"App ID to stop","title":"App Id"},"description":"App ID to stop"},{"name":"endpointId","in":"query","required":false,"schema":{"type":"integer","description":"Endpoint ID to stop app on. If not set, stop on the local endpoint","title":"Endpointid"},"description":"Endpoint ID to stop app on. If not set, stop on the local endpoint"}],"responses":{"204":{"description":"App stopped successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Request"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"}}}},"/apps/{app_id}/restart":{"post":{"tags":["apps"],"summary":"Restart App","description":"Restart an app on an endpoint","operationId":"app_restart_apps__app_id__restart_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string","description":"App ID to restart","title":"App Id"},"description":"App ID to restart"},{"name":"endpointId","in":"query","required":false,"schema":{"type":"integer","description":"Endpoint ID to Restart app on. If not set, Restart on the local endpoint","title":"Endpointid"},"description":"Endpoint ID to Restart app on. If not set, Restart on the local endpoint"}],"responses":{"204":{"description":"App restarted successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Request"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"}}}},"/apps/{app_id}/redeploy":{"put":{"tags":["apps"],"summary":"Redeploy App","description":"Redeploy an app on an endpoint","operationId":"app_redeploy_apps__app_id__redeploy_put","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string","description":"App ID to redeploy","title":"App Id"},"description":"App ID to redeploy"},{"name":"endpointId","in":"query","required":false,"schema":{"type":"integer","description":"Endpoint ID to redeploy app on. If not set, redeploy on the local endpoint","title":"Endpointid"},"description":"Endpoint ID to redeploy app on. If not set, redeploy on the local endpoint"},{"name":"pullImage","in":"query","required":true,"schema":{"type":"boolean","description":"Whether to pull the image when redeploying the app","title":"Pullimage"},"description":"Whether to pull the image when redeploying the app"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{}}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Request"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"}}}},"/apps/{app_id}/uninstall":{"delete":{"tags":["apps"],"summary":"Uninstall App","description":"Uninstall an app on an endpoint","operationId":"apps_uninstall_apps__app_id__uninstall_delete","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string","description":"App ID to uninstall","title":"App Id"},"description":"App ID to uninstall"},{"name":"endpointId","in":"query","required":false,"schema":{"type":"integer","description":"Endpoint ID to uninstall app on,if not set, uninstall on the local endpoint","title":"Endpointid"},"description":"Endpoint ID to uninstall app on,if not set, uninstall on the local endpoint"},{"name":"purge_data","in":"query","required":true,"schema":{"type":"boolean","description":"Whether to purge data when uninstalling the app","title":"Purge Data"},"description":"Whether to purge data when uninstalling the app"}],"responses":{"204":{"description":"App uninstalled successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Request"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"}}}},"/apps/{app_id}/remove":{"delete":{"tags":["apps"],"summary":"Remove App","description":"Remove an app on an endpoint where the app is empty(status is 'inactive')","operationId":"app_remove_apps__app_id__remove_delete","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string","description":"App ID to remove","title":"App Id"},"description":"App ID to remove"},{"name":"endpointId","in":"query","required":false,"schema":{"type":"integer","description":"Endpoint ID to remove app on. If not set, remove on the local endpoint","title":"Endpointid"},"description":"Endpoint ID to remove app on. If not set, remove on the local endpoint"}],"responses":{"204":{"description":"App removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Request"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"}}}},"/apps/{app_id}/error/remove":{"delete":{"tags":["apps"],"summary":"Remove Error App","description":"Remove an app on an endpoint where the app is error(status is 'error')","operationId":"app_remove_apps__app_id__error_remove_delete","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string","description":"The error app ID to remove","title":"App Id"},"description":"The error app ID to remove"}],"responses":{"204":{"description":"App removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Request"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"}}}},"/integrations/{integration_key}/session":{"post":{"tags":["integrations"],"summary":"Bootstrap Integration Session","operationId":"bootstrap_integration_session_integrations__integration_key__session_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"integration_key","in":"path","required":true,"schema":{"enum":["gitea","portainer","npm"],"type":"string","title":"Integration Key"}},{"name":"x-websoft9-locale","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Websoft9-Locale"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/proxys/{app_id}":{"get":{"tags":["proxys"],"summary":"Get Proxys","description":"Get proxys by app","operationId":"get_proxys_proxys__app_id__get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string","description":"App ID to get proxys from","title":"App Id"},"description":"App ID to get proxys from"},{"name":"endpointId","in":"query","required":false,"schema":{"type":"integer","description":"Endpoint ID to get proxys from. If not set, get proxys from the local endpoint","title":"Endpointid"},"description":"Endpoint ID to get proxys from. If not set, get proxys from the local endpoint"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ProxyHost"},"title":"Response 200 Get Proxys Proxys App Id Get"}}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Request"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"}}},"post":{"tags":["proxys"],"summary":"Create Proxy","description":"Create a proxy host","operationId":"create_proxys_proxys__app_id__post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string","description":"App ID to create proxys from","title":"App Id"},"description":"App ID to create proxys from"},{"name":"endpointId","in":"query","required":false,"schema":{"type":"integer","description":"Endpoint ID to create proxys from. If not set, create proxys from the local endpoint","title":"Endpointid"},"description":"Endpoint ID to create proxys from. If not set, create proxys from the local endpoint"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainNames","description":"Domain names to create proxys from"},"example":{"domain_names":["example1.com","example2.com"]}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ProxyHost"},"title":"Response 200 Create Proxys Proxys App Id Post"}}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Request"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"}}}},"/proxys/ssl/certificates":{"get":{"tags":["proxys"],"summary":"Get SSL Certificates","description":"Get all ssl certificates","operationId":"get_certificates_proxys_ssl_certificates_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Response 200 Get Certificates Proxys Ssl Certificates Get"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"APIKeyHeader":[]}]}},"/proxys/{proxy_id}":{"put":{"tags":["proxys"],"summary":"Update Proxys","description":"Update proxys by app","operationId":"update_proxys_proxys__proxy_id__put","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"proxy_id","in":"path","required":true,"schema":{"type":"integer","description":"Proxy ID to update proxys from","title":"Proxy Id"},"description":"Proxy ID to update proxys from"},{"name":"endpointId","in":"query","required":false,"schema":{"type":"integer","description":"Endpoint ID to create proxys from. If not set, create proxys from the local endpoint","title":"Endpointid"},"description":"Endpoint ID to create proxys from. If not set, create proxys from the local endpoint"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainNames","description":"Domain names to update proxys from"},"example":{"domain_names":["example1.com","example2.com"]}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ProxyHost"},"title":"Response 200 Update Proxys Proxys Proxy Id Put"}}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Request"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"}}},"delete":{"tags":["proxys"],"summary":"Delete Proxys","description":"Delete proxys by proxy_id","operationId":"delete_proxys_by_id_proxys__proxy_id__delete","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"proxy_id","in":"path","required":true,"schema":{"type":"integer","description":"Proxy ID to delete proxys from","title":"Proxy Id"},"description":"Proxy ID to delete proxys from"}],"responses":{"204":{"description":"Delete Proxys Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Request"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"}}}},"/backup/{app_id}":{"post":{"tags":["backup"],"summary":"Create Backup","description":"Create a backup for the specified app","operationId":"create_backup_backup__app_id__post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string","description":"App ID to create backup for","title":"App Id"},"description":"App ID to create backup for"}],"responses":{"200":{"description":"Backup created successfully","content":{"application/json":{"schema":{}}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Request"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"}}}},"/backup/snapshots":{"get":{"tags":["backup"],"summary":"List Snapshots","description":"List all snapshots or filter by app ID","operationId":"list_snapshots_backup_snapshots_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"app_id","in":"query","required":false,"schema":{"type":"string","description":"App ID to filter snapshots by (optional)","title":"App Id"},"description":"App ID to filter snapshots by (optional)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/BackupSnapshot"},"title":"Response 200 List Snapshots Backup Snapshots Get"}}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Request"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"}}}},"/backup/snapshots/{snapshot_id}":{"delete":{"tags":["backup"],"summary":"Delete Snapshot","description":"Delete a snapshot by its ID","operationId":"delete_snapshot_backup_snapshots__snapshot_id__delete","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"snapshot_id","in":"path","required":true,"schema":{"type":"string","description":"Snapshot ID to delete","title":"Snapshot Id"},"description":"Snapshot ID to delete"}],"responses":{"204":{"description":"Snapshot deleted successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Request"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"}}}},"/backup/restore/{app_id}/{snapshot_id}":{"post":{"tags":["backup"],"summary":"Restore Snapshot","description":"Restore a snapshot to the specified locations","operationId":"restore_snapshot_backup_restore__app_id___snapshot_id__post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string","description":"App ID to restore","title":"App Id"},"description":"App ID to restore"},{"name":"snapshot_id","in":"path","required":true,"schema":{"type":"string","description":"Snapshot ID to restore","title":"Snapshot Id"},"description":"Snapshot ID to restore"}],"responses":{"200":{"description":"Snapshot restored successfully","content":{"application/json":{"schema":{}}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Request"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"}}}},"/settings":{"get":{"tags":["settings"],"summary":"Get settings","description":"Get settings","operationId":"get_settings_settings_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppSettings"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"APIKeyHeader":[]}]}},"/settings/{section}":{"get":{"tags":["settings"],"summary":"Get settings","description":"Get settings by section","operationId":"get_setting_by_section_settings__section__get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"section","in":"path","required":true,"schema":{"type":"string","description":"Section name to update settings from","title":"Section"},"description":"Section name to update settings from"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppSettings"}}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Request"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"}}},"put":{"tags":["settings"],"summary":"Update Settings","description":"Update settings","operationId":"update_settings_settings__section__put","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"section","in":"path","required":true,"schema":{"type":"string","description":"Section name to update settings from","title":"Section"},"description":"Section name to update settings from"},{"name":"key","in":"query","required":true,"schema":{"type":"string","description":"Key name to update settings from","title":"Key"},"description":"Key name to update settings from"},{"name":"value","in":"query","required":true,"schema":{"type":"string","description":"Key value to update settings from","title":"Value"},"description":"Key value to update settings from"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppSettings"}}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Request"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"}}}}},"components":{"schemas":{"ApiKeySetting":{"properties":{"key":{"type":"string","title":"The api key"}},"type":"object","required":["key"],"title":"ApiKeySetting"},"AppAvailableResponse":{"properties":{"sys":{"additionalProperties":{"type":"string"},"type":"object","title":"Sys","description":"id","example":{"id":"2KY3eyxKkWDp2ZDTS66aP4"}},"key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Key","description":"Key","example":"wordpress"},"hot":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Hot","description":"Hot","default":0,"example":1000},"trademark":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Trademark","description":"Trademark","example":"WordPress"},"summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Summary","description":"Summary","example":"WordPress is a free and open-source content management system written in PHP and paired with a MySQL or MariaDB database."},"overview":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Overview","description":"Overview","example":"WordPress is a free and open-source content management system written in PHP and paired with a MySQL or MariaDB database."},"websiteurl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Websiteurl","description":"Website URL","example":"https://wordpress.org/"},"screenshots":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Screenshots","description":"Screenshots","example":[{"id":"8248371f-a25f-4ae6-82be-7c6d8f7b9bb0","key":"gui start","value":"https://libs.websoft9.com/Websoft9/DocsPicture/zh/gogs/gogs-guistart-websoft9.png"}]},"distribution":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Distribution","description":"Distribution","example":[{"id":"ff8ceafb-dd7f-4dfc-b523-f13edefa88a7","key":"Community","value":"0.13"}]},"vcpu":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Vcpu","description":"VCPU","example":1},"memory":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Memory","description":"Memory(GB)","example":1},"storage":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Storage","description":"Storage(GB)","example":1},"logo":{"additionalProperties":{"type":"string"},"type":"object","title":"Logo","description":"Logo","example":{"imageurl":"https://libs.websoft9.com/Websoft9/logo/product/gogs-websoft9.png"}},"catalogCollection":{"additionalProperties":true,"type":"object","title":"Catalogcollection","description":"Catalog Collection","example":{"items":[{"catalogCollection":{"items":[{"key":"itdeveloper","title":"IT Developer"}]},"key":"repository","title":"Code Repository"}]}}},"type":"object","required":["sys","key"],"title":"AppAvailableResponse"},"AppCatalogResponse":{"properties":{"key":{"type":"string","title":"Key","description":"Key","example":"analytics"},"position":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Position","description":"Position","default":0,"example":0},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title","description":"Title","example":"Data Analytics"},"linkedFrom":{"additionalProperties":{"additionalProperties":true,"type":"object"},"type":"object","title":"Linkedfrom","description":"Linked From","example":{"items":[{"key":"itdeveloper","title":"IT Developer"}]}}},"type":"object","required":["key","linkedFrom"],"title":"AppCatalogResponse"},"AppResponse":{"properties":{"app_id":{"type":"string","title":"App Id","description":"App ID","default":"","example":"wordpress"},"endpointId":{"type":"integer","title":"Endpointid","description":"Endpoint ID(-1:Not install on app store)","default":-1,"example":1},"app_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"App Name","description":"App name","example":"wordpress"},"app_dist":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"App Dist","description":"App dist","example":"community"},"app_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"App Version","description":"App version","example":"1.0.0"},"app_official":{"type":"boolean","title":"App Official","description":"App official","default":true,"example":true},"proxy_enabled":{"type":"boolean","title":"Proxy Enabled","description":"Proxy enabled","default":false,"example":false},"status":{"type":"integer","title":"Status","description":"App status(0:unknown,1:active,2:inactive,3:installing,4:error)","default":0,"example":0},"creationDate":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Creationdate","description":"Creation date","example":0},"domain_names":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Domain Names","description":"Domain names","default":[]},"env":{"additionalProperties":true,"type":"object","title":"Env","description":"Environment variables","default":{}},"gitConfig":{"additionalProperties":true,"type":"object","title":"Gitconfig","description":"Git configuration","default":{}},"containers":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Containers","description":"Containers","default":[]},"volumes":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Volumes","description":"Volumes","default":[]},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error","description":"Error message","example":"Internal Server Error"},"logs":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Logs","description":"Logs","example":["Simple log message",{"id":"db01ae396f16","status":"Installing..."}]}},"type":"object","title":"AppResponse"},"AppSettings":{"properties":{"nginx_proxy_manager":{"$ref":"#/components/schemas/NginxProxyManagerSetting"},"gitea":{"$ref":"#/components/schemas/GiteaSetting"},"portainer":{"$ref":"#/components/schemas/PortainerSetting"},"api_key":{"$ref":"#/components/schemas/ApiKeySetting"},"domain":{"$ref":"#/components/schemas/Domain"},"cockpit":{"$ref":"#/components/schemas/Cockpit"}},"type":"object","required":["nginx_proxy_manager","gitea","portainer","api_key","domain","cockpit"],"title":"AppSettings"},"BackupSnapshot":{"properties":{"time":{"type":"string","title":"Time","description":"Snapshot creation time","example":"2025-08-13T08:30:32.081825223Z"},"parent":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Parent","description":"Parent snapshot ID","example":"604ac31654021f426a9ab702ada8ab608d001c870681d648aed733fbf0df5e57"},"tree":{"type":"string","title":"Tree","description":"Tree hash","example":"39911524fc59687d401bced629acf9892cfa63a41dbf27dc055a1a25ad9d2721"},"paths":{"items":{"type":"string"},"type":"array","title":"Paths","description":"Paths included in the snapshot","example":["/wp_bl0zt_mysql_data","/wp_bl0zt_wordpress"]},"hostname":{"type":"string","title":"Hostname","description":"Hostname of the backup","example":"websoft9-backup-host"},"username":{"type":"string","title":"Username","description":"Username of the backup creator","example":"root"},"tags":{"items":{"type":"string"},"type":"array","title":"Tags","description":"Tags associated with the snapshot","example":["wp_bl0zt"]},"program_version":{"type":"string","title":"Program Version","description":"Restic program version","example":"restic 0.18.0"},"summary":{"$ref":"#/components/schemas/BackupSnapshotSummary","description":"Summary of the snapshot"},"id":{"type":"string","title":"Id","description":"Snapshot ID","example":"2b1112d4a102b501c45fbbd39a5467e58036d23eaac54bfc6b8ed2284d61a609"},"short_id":{"type":"string","title":"Short Id","description":"Shortened snapshot ID","example":"2b1112d4"}},"type":"object","required":["time","tree","paths","hostname","username","tags","program_version","summary","id","short_id"],"title":"BackupSnapshot"},"BackupSnapshotSummary":{"properties":{"backup_start":{"type":"string","title":"Backup Start","description":"Backup start time","example":"2025-08-13T08:30:32.081825223Z"},"backup_end":{"type":"string","title":"Backup End","description":"Backup end time","example":"2025-08-13T08:30:32.817532575Z"},"files_new":{"type":"integer","title":"Files New","description":"Number of new files","example":0},"files_changed":{"type":"integer","title":"Files Changed","description":"Number of changed files","example":0},"files_unmodified":{"type":"integer","title":"Files Unmodified","description":"Number of unmodified files","example":3471},"dirs_new":{"type":"integer","title":"Dirs New","description":"Number of new directories","example":0},"dirs_changed":{"type":"integer","title":"Dirs Changed","description":"Number of changed directories","example":0},"dirs_unmodified":{"type":"integer","title":"Dirs Unmodified","description":"Number of unmodified directories","example":357},"data_blobs":{"type":"integer","title":"Data Blobs","description":"Number of data blobs","example":0},"tree_blobs":{"type":"integer","title":"Tree Blobs","description":"Number of tree blobs","example":0},"data_added":{"type":"integer","title":"Data Added","description":"Data added in bytes","example":0},"data_added_packed":{"type":"integer","title":"Data Added Packed","description":"Packed data added in bytes","example":0},"total_files_processed":{"type":"integer","title":"Total Files Processed","description":"Total files processed","example":3471},"total_bytes_processed":{"type":"integer","title":"Total Bytes Processed","description":"Total bytes processed","example":255549458}},"type":"object","required":["backup_start","backup_end","files_new","files_changed","files_unmodified","dirs_new","dirs_changed","dirs_unmodified","data_blobs","tree_blobs","data_added","data_added_packed","total_files_processed","total_bytes_processed"],"title":"BackupSnapshotSummary"},"Cockpit":{"properties":{"port":{"type":"integer","title":"The port of cockpit"}},"type":"object","required":["port"],"title":"Cockpit"},"Domain":{"properties":{"wildcard_domain":{"type":"string","title":"The domain name"}},"type":"object","title":"Domain"},"DomainNames":{"properties":{"domain_names":{"items":{"type":"string"},"type":"array","title":"Domain Names"}},"type":"object","required":["domain_names"],"title":"DomainNames"},"Edition":{"properties":{"dist":{"type":"string","title":"Dist","description":"The edition of the app","examples":["community"]},"version":{"type":"string","title":"Version","description":"The version of the app","examples":["1.0.0","latest"]}},"type":"object","required":["dist","version"],"title":"Edition"},"ErrorResponse":{"properties":{"message":{"type":"string","title":"Message"},"details":{"type":"string","title":"Details"}},"type":"object","required":["message","details"],"title":"ErrorResponse"},"GiteaSetting":{"properties":{"base_url":{"type":"string","maxLength":2083,"minLength":1,"format":"uri","title":"The base url for gitea"},"user_name":{"type":"string","title":"The user name for gitea"},"user_pwd":{"type":"string","title":"The user password for gitea"}},"type":"object","required":["base_url","user_name","user_pwd"],"title":"GiteaSetting"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"NginxProxyManagerSetting":{"properties":{"base_url":{"type":"string","maxLength":2083,"minLength":1,"format":"uri","title":"The base url for nginx proxy manager"},"user_name":{"type":"string","title":"The user name for nginx proxy manager"},"user_pwd":{"type":"string","title":"The user password for nginx proxy manager"},"listen_port":{"type":"integer","title":"The listen port for nginx proxy manager"},"docker0_ip":{"type":"string","title":"The docker0 IP for nginx proxy manager"},"ssl_cert":{"type":"string","title":"The SSL certificate path for nginx proxy manager"},"ssl_key":{"type":"string","title":"The SSL key path for nginx proxy manager"}},"type":"object","required":["base_url","user_name","user_pwd","listen_port","docker0_ip","ssl_cert","ssl_key"],"title":"NginxProxyManagerSetting"},"PortainerSetting":{"properties":{"base_url":{"type":"string","maxLength":2083,"minLength":1,"format":"uri","title":"The base url for portainer"},"user_name":{"type":"string","title":"The user name for portainer"},"user_pwd":{"type":"string","title":"The user password for portainer"}},"type":"object","required":["base_url","user_name","user_pwd"],"title":"PortainerSetting"},"ProxyHost":{"properties":{"proxy_id":{"type":"integer","title":"Proxy Id"},"domain_names":{"items":{"type":"string"},"type":"array","title":"Domain Names"}},"type":"object","required":["proxy_id","domain_names"],"title":"ProxyHost"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"appInstall":{"properties":{"app_name":{"type":"string","title":"App Name","description":"The name of the app","examples":["wordpress","mysql"]},"edition":{"$ref":"#/components/schemas/Edition","description":"The edition of the app","example":{"dist":"community","version":"1.0.0"}},"app_id":{"type":"string","title":"App Id","description":"The custom identifier for the application. It must be a combination of 2 to 20 lowercase letters and numbers, and cannot start with a number.","example":"wordpress"},"proxy_enabled":{"type":"boolean","title":"Proxy Enabled","description":"Whether to enable proxy for the app: \n If true,the app will be accessed through the proxy server, \n If false, the app will be accessed through the port of the host machine.","example":true},"domain_names":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Domain Names","description":"The domain or IP for the app: \n If proxy_enabled is true, provide the domain name.The first domain name will be used as the primary domain name.(e.g., [\"wordpress.example1.com\", \"wordpress.example2.com\"])\n If proxy_enabled is false, provide the host machine's IP address.(e.g., [\"192.168.1.1\"])","example":["wordpress.example1.com","wordpress.example2.com"]},"settings":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Settings","description":"The settings for the app","example":{"W9_HTTP_PORT_SET":"9001"}}},"type":"object","required":["app_name","edition","app_id","proxy_enabled","domain_names"],"title":"appInstall"}},"securitySchemes":{"APIKeyHeader":{"type":"apiKey","in":"header","name":"x-api-key"}}}}