# Web API Public APIs for web applications including file uploads, chat interactions, and app management ## Version: 1.0 ### Available authorizations #### Bearer (HTTP, bearer) Use the Service API key as a Bearer token in the Authorization header. Bearer format: API_KEY --- ## web Web application API operations ### [POST] /audio-to-text **Convert audio to text** Convert audio file to text using speech-to-text service. #### Responses | Code | Description | Schema | | ---- | ----------- | ------ | | 200 | Success | **application/json**: [AudioToTextResponse](#audiototextresponse)
| | 400 | Bad Request | **application/json**: [AppUnavailableError](#appunavailableerror)
[CompletionRequestError](#completionrequesterror)
[ModelCurrentlyNotSupportError](#modelcurrentlynotsupporterror)
[NoAudioUploadedError](#noaudiouploadederror)
[ProviderNotInitializeError](#providernotinitializeerror)
[ProviderNotSupportSpeechToTextError](#providernotsupportspeechtotexterror)
[ProviderQuotaExceededError](#providerquotaexceedederror)
[SpeechToTextDisabledError](#speechtotextdisablederror)
[ErrorResponse](#errorresponse)
| | 401 | Unauthorized | **application/json**: [ErrorResponse](#errorresponse)
| | 413 | Audio file too large | **application/json**: [AudioTooLargeError](#audiotoolargeerror)
[ErrorResponse](#errorresponse)
| | 415 | Unsupported audio type | **application/json**: [UnsupportedAudioTypeError](#unsupportedaudiotypeerror)
[ErrorResponse](#errorresponse)
| | 500 | Internal Server Error | **application/json**: [ErrorResponse](#errorresponse)
| | default | Error | **application/json**: [ErrorResponse](#errorresponse)
| ### [POST] /chat-messages Create a chat message for conversational applications. #### Request Body | Required | Schema | | -------- | ------ | | Yes | **application/json**: [ChatMessagePayload](#chatmessagepayload)
| #### Responses | Code | Description | Schema | | ---- | ----------- | ------ | | 200 | Success | **application/json**: [GeneratedAppResponse](#generatedappresponse)
| | 400 | Bad Request | **application/json**: [AgentNotPublishedError](#agentnotpublishederror)
[AppUnavailableError](#appunavailableerror)
[CompletionRequestError](#completionrequesterror)
[ModelCurrentlyNotSupportError](#modelcurrentlynotsupporterror)
[NotChatAppError](#notchatapperror)
[ProviderNotInitializeError](#providernotinitializeerror)
[ProviderQuotaExceededError](#providerquotaexceedederror)
[ErrorResponse](#errorresponse)
| | 401 | Unauthorized | **application/json**: [ErrorResponse](#errorresponse)
| | 404 | App Not Found | **application/json**: [ErrorResponse](#errorresponse)
| | 429 | Too Many Requests | **application/json**: [RateLimitError](#ratelimiterror)
[ErrorResponse](#errorresponse)
| | 500 | Internal Server Error | **application/json**: [ErrorResponse](#errorresponse)
| | default | Error | **application/json**: [ErrorResponse](#errorresponse)
| ### [POST] /chat-messages/{task_id}/stop Stop a running chat message task. #### Parameters | Name | Located in | Description | Required | Schema | | ---- | ---------- | ----------- | -------- | ------ | | task_id | path | Task ID to stop | Yes | string | #### Responses | Code | Description | Schema | | ---- | ----------- | ------ | | 200 | Success | **application/json**: [SimpleResultResponse](#simpleresultresponse)
| | 400 | Bad Request | **application/json**: [NotChatAppError](#notchatapperror)
[ErrorResponse](#errorresponse)
| | 401 | Unauthorized | **application/json**: [ErrorResponse](#errorresponse)
| | 404 | Task Not Found | **application/json**: [ErrorResponse](#errorresponse)
| | 500 | Internal Server Error | **application/json**: [ErrorResponse](#errorresponse)
| | default | Error | **application/json**: [ErrorResponse](#errorresponse)
| ### [POST] /completion-messages Create a completion message for text generation applications. #### Request Body | Required | Schema | | -------- | ------ | | Yes | **application/json**: [CompletionMessagePayload](#completionmessagepayload)
| #### Responses | Code | Description | Schema | | ---- | ----------- | ------ | | 200 | Success | **application/json**: [GeneratedAppResponse](#generatedappresponse)
| | 400 | Bad Request | **application/json**: [AppUnavailableError](#appunavailableerror)
[CompletionRequestError](#completionrequesterror)
[ModelCurrentlyNotSupportError](#modelcurrentlynotsupporterror)
[NotCompletionAppError](#notcompletionapperror)
[ProviderNotInitializeError](#providernotinitializeerror)
[ProviderQuotaExceededError](#providerquotaexceedederror)
[ErrorResponse](#errorresponse)
| | 401 | Unauthorized | **application/json**: [ErrorResponse](#errorresponse)
| | 404 | App Not Found | **application/json**: [ErrorResponse](#errorresponse)
| | 500 | Internal Server Error | **application/json**: [ErrorResponse](#errorresponse)
| | default | Error | **application/json**: [ErrorResponse](#errorresponse)
| ### [POST] /completion-messages/{task_id}/stop Stop a running completion message task. #### Parameters | Name | Located in | Description | Required | Schema | | ---- | ---------- | ----------- | -------- | ------ | | task_id | path | Task ID to stop | Yes | string | #### Responses | Code | Description | Schema | | ---- | ----------- | ------ | | 200 | Success | **application/json**: [SimpleResultResponse](#simpleresultresponse)
| | 400 | Bad Request | **application/json**: [NotCompletionAppError](#notcompletionapperror)
[ErrorResponse](#errorresponse)
| | 401 | Unauthorized | **application/json**: [ErrorResponse](#errorresponse)
| | 404 | Task Not Found | **application/json**: [ErrorResponse](#errorresponse)
| | 500 | Internal Server Error | **application/json**: [ErrorResponse](#errorresponse)
| | default | Error | **application/json**: [ErrorResponse](#errorresponse)
| ### [GET] /conversations Retrieve paginated list of conversations for a chat application. #### Parameters | Name | Located in | Description | Required | Schema | | ---- | ---------- | ----------- | -------- | ------ | | last_id | query | | No | string | | limit | query | | No | integer,
**Default:** 20 | | pinned | query | | No | boolean | | sort_by | query | | No | string,
**Available values:** "-created_at", "-updated_at", "created_at", "updated_at",
**Default:** -updated_at | #### Responses | Code | Description | Schema | | ---- | ----------- | ------ | | 200 | Success | **application/json**: [ConversationInfiniteScrollPagination](#conversationinfinitescrollpagination)
| | 400 | Bad Request | **application/json**: [NotChatAppError](#notchatapperror)
[ErrorResponse](#errorresponse)
| | 401 | Unauthorized | **application/json**: [ErrorResponse](#errorresponse)
| | 404 | App Not Found or Not a Chat App | **application/json**: [ErrorResponse](#errorresponse)
| | 500 | Internal Server Error | **application/json**: [ErrorResponse](#errorresponse)
| | default | Error | **application/json**: [ErrorResponse](#errorresponse)
| ### [DELETE] /conversations/{c_id} Delete a specific conversation. #### Parameters | Name | Located in | Description | Required | Schema | | ---- | ---------- | ----------- | -------- | ------ | | c_id | path | Conversation UUID | Yes | string (uuid) | #### Responses | Code | Description | Schema | | ---- | ----------- | ------ | | 204 | Conversation deleted successfully | | | 400 | Bad Request | **application/json**: [NotChatAppError](#notchatapperror)
[ErrorResponse](#errorresponse)
| | 401 | Unauthorized | **application/json**: [ErrorResponse](#errorresponse)
| | 404 | Conversation Not Found or Not a Chat App | **application/json**: [ErrorResponse](#errorresponse)
| | 500 | Internal Server Error | **application/json**: [ErrorResponse](#errorresponse)
| | default | Error | **application/json**: [ErrorResponse](#errorresponse)
| ### [POST] /conversations/{c_id}/name Rename a specific conversation with a custom name or auto-generate one. #### Parameters | Name | Located in | Description | Required | Schema | | ---- | ---------- | ----------- | -------- | ------ | | c_id | path | Conversation UUID | Yes | string (uuid) | | auto_generate | query | Auto-generate conversation name | No | boolean | | name | query | New conversation name | No | string | #### Request Body | Required | Schema | | -------- | ------ | | Yes | **application/json**: [ConversationRenamePayload](#conversationrenamepayload)
| #### Responses | Code | Description | Schema | | ---- | ----------- | ------ | | 200 | Conversation renamed successfully | **application/json**: [SimpleConversation](#simpleconversation)
| | 400 | Bad Request | **application/json**: [NotChatAppError](#notchatapperror)
[ErrorResponse](#errorresponse)
| | 401 | Unauthorized | **application/json**: [ErrorResponse](#errorresponse)
| | 404 | Conversation Not Found or Not a Chat App | **application/json**: [ErrorResponse](#errorresponse)
| | 500 | Internal Server Error | **application/json**: [ErrorResponse](#errorresponse)
| | default | Error | **application/json**: [ErrorResponse](#errorresponse)
| ### [PATCH] /conversations/{c_id}/pin Pin a specific conversation to keep it at the top of the list. #### Parameters | Name | Located in | Description | Required | Schema | | ---- | ---------- | ----------- | -------- | ------ | | c_id | path | Conversation UUID | Yes | string (uuid) | #### Responses | Code | Description | Schema | | ---- | ----------- | ------ | | 200 | Conversation pinned successfully | **application/json**: [ResultResponse](#resultresponse)
| | 400 | Bad Request | **application/json**: [NotChatAppError](#notchatapperror)
[ErrorResponse](#errorresponse)
| | 401 | Unauthorized | **application/json**: [ErrorResponse](#errorresponse)
| | 404 | Conversation Not Found or Not a Chat App | **application/json**: [ErrorResponse](#errorresponse)
| | 500 | Internal Server Error | **application/json**: [ErrorResponse](#errorresponse)
| | default | Error | **application/json**: [ErrorResponse](#errorresponse)
| ### [PATCH] /conversations/{c_id}/unpin Unpin a specific conversation to remove it from the top of the list. #### Parameters | Name | Located in | Description | Required | Schema | | ---- | ---------- | ----------- | -------- | ------ | | c_id | path | Conversation UUID | Yes | string (uuid) | #### Responses | Code | Description | Schema | | ---- | ----------- | ------ | | 200 | Conversation unpinned successfully | **application/json**: [ResultResponse](#resultresponse)
| | 400 | Bad Request | **application/json**: [NotChatAppError](#notchatapperror)
[ErrorResponse](#errorresponse)
| | 401 | Unauthorized | **application/json**: [ErrorResponse](#errorresponse)
| | 404 | Conversation Not Found or Not a Chat App | **application/json**: [ErrorResponse](#errorresponse)
| | 500 | Internal Server Error | **application/json**: [ErrorResponse](#errorresponse)
| | default | Error | **application/json**: [ErrorResponse](#errorresponse)
| ### [POST] /email-code-login Send email verification code for login #### Request Body | Required | Schema | | -------- | ------ | | Yes | **application/json**: [EmailCodeLoginSendPayload](#emailcodeloginsendpayload)
| #### Responses | Code | Description | Schema | | ---- | ----------- | ------ | | 200 | Email code sent successfully | **application/json**: [SimpleResultDataResponse](#simpleresultdataresponse)
| | 400 | Bad request - invalid email format | **application/json**: [ErrorResponse](#errorresponse)
| | 401 | Unauthorized | **application/json**: [AuthenticationFailedError](#authenticationfailederror)
[ErrorResponse](#errorresponse)
| | 404 | Account not found | **application/json**: [ErrorResponse](#errorresponse)
| | default | Error | **application/json**: [ErrorResponse](#errorresponse)
| ### [POST] /email-code-login/validity Verify email code and complete login #### Request Body | Required | Schema | | -------- | ------ | | Yes | **application/json**: [EmailCodeLoginVerifyPayload](#emailcodeloginverifypayload)
| #### Responses | Code | Description | Schema | | ---- | ----------- | ------ | | 200 | Email code verified and login successful | **application/json**: [AccessTokenResultResponse](#accesstokenresultresponse)
| | 400 | Bad request - invalid code or token | **application/json**: [AccountBannedError](#accountbannederror)
[EmailCodeError](#emailcodeerror)
[InvalidEmailError](#invalidemailerror)
[ErrorResponse](#errorresponse)
| | 401 | Invalid token or expired code | **application/json**: [AuthenticationFailedError](#authenticationfailederror)
[ErrorResponse](#errorresponse)
| | 404 | Account not found | **application/json**: [ErrorResponse](#errorresponse)
| | default | Error | **application/json**: [ErrorResponse](#errorresponse)
| ### [POST] /files/upload **Upload a file for use in web applications** Upload a file for use in web applications Accepts file uploads for use within web applications, supporting multiple file types with automatic validation and storage. Args: app_model: The associated application model end_user: The end user uploading the file Form Parameters: file: The file to upload (required) source: Optional source type (datasets or None) Returns: dict: File information including ID, URL, and metadata int: HTTP status code 201 for success Raises: NoFileUploadedError: No file provided in request TooManyFilesError: Multiple files provided (only one allowed) FilenameNotExistsError: File has no filename FileTooLargeError: File exceeds size limit UnsupportedFileTypeError: File type not supported BlockedFileExtensionError: File extension is blocked #### Responses | Code | Description | Schema | | ---- | ----------- | ------ | | 201 | File uploaded successfully | **application/json**: [FileResponse](#fileresponse)
| | 400 | - `no_file_uploaded` : No file was provided in the request. - `too_many_files` : Only one file is allowed per request. - `filename_not_exists_error` : The uploaded file has no filename. - `file_extension_blocked` : The file extension is blocked for security reasons. | **application/json**: [FileExtensionBlockedError](#fileextensionblockederror)
[FilenameNotExistsError](#filenamenotexistserror)
[NoFileUploadedError](#nofileuploadederror)
[TooManyFilesError](#toomanyfileserror)
[ErrorResponse](#errorresponse)
| | 413 | `file_too_large` : File size exceeded. | **application/json**: [FileTooLargeError](#filetoolargeerror)
[ErrorResponse](#errorresponse)
| | 415 | `unsupported_file_type` : File type not allowed. | **application/json**: [UnsupportedFileTypeError](#unsupportedfiletypeerror)
[ErrorResponse](#errorresponse)
| | default | Error | **application/json**: [ErrorResponse](#errorresponse)
| ### [POST] /forgot-password Send password reset email #### Request Body | Required | Schema | | -------- | ------ | | Yes | **application/json**: [ForgotPasswordSendPayload](#forgotpasswordsendpayload)
| #### Responses | Code | Description | Schema | | ---- | ----------- | ------ | | 200 | Password reset email sent successfully | **application/json**: [SimpleResultDataResponse](#simpleresultdataresponse)
| | 400 | Bad request - invalid email format | **application/json**: [ErrorResponse](#errorresponse)
| | 401 | Unauthorized | **application/json**: [AuthenticationFailedError](#authenticationfailederror)
[ErrorResponse](#errorresponse)
| | 404 | Account not found | **application/json**: [ErrorResponse](#errorresponse)
| | 429 | Too many requests - rate limit exceeded | **application/json**: [EmailSendIpLimitError](#emailsendiplimiterror)
[PasswordResetRateLimitExceededError](#passwordresetratelimitexceedederror)
[ErrorResponse](#errorresponse)
| | default | Error | **application/json**: [ErrorResponse](#errorresponse)
| ### [POST] /forgot-password/resets Reset user password with verification token #### Request Body | Required | Schema | | -------- | ------ | | Yes | **application/json**: [ForgotPasswordResetPayload](#forgotpasswordresetpayload)
| #### Responses | Code | Description | Schema | | ---- | ----------- | ------ | | 200 | Password reset successfully | **application/json**: [SimpleResultResponse](#simpleresultresponse)
| | 400 | Bad request - invalid parameters or password mismatch | **application/json**: [InvalidOrExpiredTokenError](#invalidorexpiredtokenerror)
[PasswordMismatchError](#passwordmismatcherror)
[ErrorResponse](#errorresponse)
| | 401 | Invalid or expired token | **application/json**: [AuthenticationFailedError](#authenticationfailederror)
[ErrorResponse](#errorresponse)
| | 404 | Account not found | **application/json**: [ErrorResponse](#errorresponse)
| | default | Error | **application/json**: [ErrorResponse](#errorresponse)
| ### [POST] /forgot-password/validity Verify password reset token validity #### Request Body | Required | Schema | | -------- | ------ | | Yes | **application/json**: [ForgotPasswordCheckPayload](#forgotpasswordcheckpayload)
| #### Responses | Code | Description | Schema | | ---- | ----------- | ------ | | 200 | Token is valid | **application/json**: [VerificationTokenResponse](#verificationtokenresponse)
| | 400 | Bad request - invalid token format | **application/json**: [EmailCodeError](#emailcodeerror)
[InvalidEmailError](#invalidemailerror)
[InvalidOrExpiredTokenError](#invalidorexpiredtokenerror)
[ErrorResponse](#errorresponse)
| | 401 | Invalid or expired token | **application/json**: [ErrorResponse](#errorresponse)
| | 429 | Too Many Requests | **application/json**: [EmailPasswordResetLimitError](#emailpasswordresetlimiterror)
[ErrorResponse](#errorresponse)
| | default | Error | **application/json**: [ErrorResponse](#errorresponse)
| ### [GET] /form/human_input/{form_token} **Get human input form definition by token** Get a human input form definition by token GET /api/form/human_input/ #### Parameters | Name | Located in | Description | Required | Schema | | ---- | ---------- | ----------- | -------- | ------ | | form_token | path | Human input form token | Yes | string | #### Responses | Code | Description | Schema | | ---- | ----------- | ------ | | 200 | Form retrieved successfully | **application/json**: [HumanInputFormDefinitionResponse](#humaninputformdefinitionresponse)
| | 403 | Forbidden | **application/json**: [ErrorResponse](#errorresponse)
| | 404 | Form not found | **application/json**: [ErrorResponse](#errorresponse)
| | 412 | Form already submitted or expired | **application/json**: [HumanInputFormExpiredError](#humaninputformexpirederror)
[HumanInputFormSubmittedError](#humaninputformsubmittederror)
[ErrorResponse](#errorresponse)
| | 429 | Too many requests | **application/json**: [WebFormRateLimitExceededError](#webformratelimitexceedederror)
[ErrorResponse](#errorresponse)
| | default | Error | **application/json**: [ErrorResponse](#errorresponse)
| ### [POST] /form/human_input/{form_token} **Submit human input form by token** Submit a human input form by token POST /api/form/human_input/ Request body: { "inputs": { "content": "User input content" }, "action": "Approve" } #### Parameters | Name | Located in | Description | Required | Schema | | ---- | ---------- | ----------- | -------- | ------ | | form_token | path | Human input form token | Yes | string | #### Request Body | Required | Schema | | -------- | ------ | | Yes | **application/json**: [HumanInputFormSubmitPayload](#humaninputformsubmitpayload)
| #### Responses | Code | Description | Schema | | ---- | ----------- | ------ | | 200 | Form submitted successfully | **application/json**: [HumanInputFormSubmitResponse](#humaninputformsubmitresponse)
| | 400 | Bad request - invalid submission data | **application/json**: [InvalidFormDataError](#invalidformdataerror)
[ErrorResponse](#errorresponse)
| | 404 | Form not found | **application/json**: [ErrorResponse](#errorresponse)
| | 412 | Form already submitted or expired | **application/json**: [HumanInputFormExpiredError](#humaninputformexpirederror)
[HumanInputFormSubmittedError](#humaninputformsubmittederror)
[ErrorResponse](#errorresponse)
| | 429 | Too many requests | **application/json**: [WebFormRateLimitExceededError](#webformratelimitexceedederror)
[ErrorResponse](#errorresponse)
| | default | Error | **application/json**: [ErrorResponse](#errorresponse)
| ### [POST] /form/human_input/{form_token}/upload-token **Issue an upload token for a human input form** Issue an upload token for an active human input form POST /api/form/human_input//upload-token #### Parameters | Name | Located in | Description | Required | Schema | | ---- | ---------- | ----------- | -------- | ------ | | form_token | path | Human input form token | Yes | string | #### Responses | Code | Description | Schema | | ---- | ----------- | ------ | | 200 | Upload token issued successfully | **application/json**: [HumanInputUploadTokenResponse](#humaninputuploadtokenresponse)
| | 404 | Form not found | **application/json**: [ErrorResponse](#errorresponse)
| | 412 | Form already submitted or expired | **application/json**: [HumanInputFormExpiredError](#humaninputformexpirederror)
[HumanInputFormSubmittedError](#humaninputformsubmittederror)
[ErrorResponse](#errorresponse)
| | 429 | Too many requests | **application/json**: [WebFormRateLimitExceededError](#webformratelimitexceedederror)
[ErrorResponse](#errorresponse)
| | default | Error | **application/json**: [ErrorResponse](#errorresponse)
| ### [POST] /human-input-forms/files **Upload one local file or remote URL file for a HITL human input form** #### Responses | Code | Description | Schema | | ---- | ----------- | ------ | | 201 | File uploaded successfully | **application/json**: [FileResponse](#fileresponse)
| | 400 | Bad Request | **application/json**: [FileExtensionBlockedError](#fileextensionblockederror)
[FilenameNotExistsError](#filenamenotexistserror)
[MalformedUploadTokenError](#malformeduploadtokenerror)
[NoFileUploadedError](#nofileuploadederror)
[RemoteFileAccessDeniedError](#remotefileaccessdeniederror)
[RemoteFileInvalidUrlError](#remotefileinvalidurlerror)
[RemoteFileUrlBlockedError](#remotefileurlblockederror)
[TooManyFilesError](#toomanyfileserror)
[ErrorResponse](#errorresponse)
| | 401 | Unauthorized | **application/json**: [UploadTokenRequiredError](#uploadtokenrequirederror)
[ErrorResponse](#errorresponse)
| | 403 | Forbidden | **application/json**: [InvalidUploadTokenError](#invaliduploadtokenerror)
[ErrorResponse](#errorresponse)
| | 404 | Not Found | **application/json**: [RemoteFileNotFoundError](#remotefilenotfounderror)
[ErrorResponse](#errorresponse)
| | 412 | Precondition Failed | **application/json**: [HumanInputFormExpiredError](#humaninputformexpirederror)
[HumanInputFormSubmittedError](#humaninputformsubmittederror)
[ErrorResponse](#errorresponse)
| | 413 | Request Entity Too Large | **application/json**: [FileTooLargeError](#filetoolargeerror)
[ErrorResponse](#errorresponse)
| | 415 | Unsupported Media Type | **application/json**: [UnsupportedFileTypeError](#unsupportedfiletypeerror)
[ErrorResponse](#errorresponse)
| | 502 | Bad Gateway | **application/json**: [RemoteFileInvalidResponseError](#remotefileinvalidresponseerror)
[RemoteFileUnavailableError](#remotefileunavailableerror)
[ErrorResponse](#errorresponse)
| | default | Error | **application/json**: [ErrorResponse](#errorresponse)
| ### [POST] /login **Authenticate user and login** Authenticate user for web application access #### Request Body | Required | Schema | | -------- | ------ | | Yes | **application/json**: [LoginPayload](#loginpayload)
| #### Responses | Code | Description | Schema | | ---- | ----------- | ------ | | 200 | Authentication successful | **application/json**: [AccessTokenResultResponse](#accesstokenresultresponse)
| | 400 | Bad request - invalid email or password format | **application/json**: [AccountBannedError](#accountbannederror)
[ErrorResponse](#errorresponse)
| | 401 | Authentication failed - email or password mismatch | **application/json**: [AuthenticationFailedError](#authenticationfailederror)
[ErrorResponse](#errorresponse)
| | 404 | Account not found | **application/json**: [ErrorResponse](#errorresponse)
| | default | Error | **application/json**: [ErrorResponse](#errorresponse)
| ### [GET] /login/status Check login status #### Parameters | Name | Located in | Description | Required | Schema | | ---- | ---------- | ----------- | -------- | ------ | | app_code | query | Web app code | No | string | | user_id | query | End user session ID | No | string | #### Responses | Code | Description | Schema | | ---- | ----------- | ------ | | 200 | Login status | **application/json**: [LoginStatusResponse](#loginstatusresponse)
| | 401 | Login status | **application/json**: [ErrorResponse](#errorresponse)
| | default | Error | **application/json**: [ErrorResponse](#errorresponse)
| ### [POST] /logout Logout user from web application #### Responses | Code | Description | Schema | | ---- | ----------- | ------ | | 200 | Logout successful | **application/json**: [SimpleResultResponse](#simpleresultresponse)
| | default | Error | **application/json**: [ErrorResponse](#errorresponse)
| ### [GET] /messages Retrieve paginated list of messages from a conversation in a chat application. #### Parameters | Name | Located in | Description | Required | Schema | | ---- | ---------- | ----------- | -------- | ------ | | conversation_id | query | Conversation ID. | Yes | string | | first_id | query | The ID of the first chat record on the current page. Omit this value to fetch the latest messages; for subsequent pages, use the first message ID from the current list to fetch older messages. | No | string | | limit | query | Number of chat history messages to return per request. | No | integer,
**Default:** 20 | #### Responses | Code | Description | Schema | | ---- | ----------- | ------ | | 200 | Success | **application/json**: [WebMessageInfiniteScrollPagination](#webmessageinfinitescrollpagination)
| | 400 | Bad Request | **application/json**: [NotChatAppError](#notchatapperror)
[ErrorResponse](#errorresponse)
| | 401 | Unauthorized | **application/json**: [ErrorResponse](#errorresponse)
| | 404 | Conversation Not Found or Not a Chat App | **application/json**: [ErrorResponse](#errorresponse)
| | 500 | Internal Server Error | **application/json**: [ErrorResponse](#errorresponse)
| | default | Error | **application/json**: [ErrorResponse](#errorresponse)
| ### [POST] /messages/{message_id}/feedbacks Submit feedback (like/dislike) for a specific message. #### Parameters | Name | Located in | Description | Required | Schema | | ---- | ---------- | ----------- | -------- | ------ | | message_id | path | Message UUID | Yes | string (uuid) | | content | query | Feedback content | No | string | | rating | query | Feedback rating | No | string,
**Available values:** "dislike", "like" | #### Request Body | Required | Schema | | -------- | ------ | | Yes | **application/json**: [MessageFeedbackPayload](#messagefeedbackpayload)
| #### Responses | Code | Description | Schema | | ---- | ----------- | ------ | | 200 | Feedback submitted successfully | **application/json**: [ResultResponse](#resultresponse)
| | 400 | Bad Request | **application/json**: [ErrorResponse](#errorresponse)
| | 401 | Unauthorized | **application/json**: [ErrorResponse](#errorresponse)
| | 404 | Message Not Found | **application/json**: [ErrorResponse](#errorresponse)
| | 500 | Internal Server Error | **application/json**: [ErrorResponse](#errorresponse)
| | default | Error | **application/json**: [ErrorResponse](#errorresponse)
| ### [GET] /messages/{message_id}/more-like-this Generate a new completion similar to an existing message (completion apps only). #### Parameters | Name | Located in | Description | Required | Schema | | ---- | ---------- | ----------- | -------- | ------ | | response_mode | query | Response mode | Yes | string,
**Available values:** "blocking", "streaming" | | message_id | path | | Yes | string (uuid) | #### Responses | Code | Description | Schema | | ---- | ----------- | ------ | | 200 | Success | **application/json**: [GeneratedAppResponse](#generatedappresponse)
| | 400 | Bad Request - Not a completion app or feature disabled | **application/json**: [CompletionRequestError](#completionrequesterror)
[ModelCurrentlyNotSupportError](#modelcurrentlynotsupporterror)
[NotCompletionAppError](#notcompletionapperror)
[ProviderNotInitializeError](#providernotinitializeerror)
[ProviderQuotaExceededError](#providerquotaexceedederror)
[ErrorResponse](#errorresponse)
| | 401 | Unauthorized | **application/json**: [ErrorResponse](#errorresponse)
| | 403 | Forbidden | **application/json**: [AppMoreLikeThisDisabledError](#appmorelikethisdisablederror)
[ErrorResponse](#errorresponse)
| | 404 | Message Not Found | **application/json**: [ErrorResponse](#errorresponse)
| | 500 | Internal Server Error | **application/json**: [ErrorResponse](#errorresponse)
| | default | Error | **application/json**: [ErrorResponse](#errorresponse)
| ### [GET] /messages/{message_id}/suggested-questions Get suggested follow-up questions after a message (chat apps only). #### Parameters | Name | Located in | Description | Required | Schema | | ---- | ---------- | ----------- | -------- | ------ | | message_id | path | Message UUID | Yes | string (uuid) | #### Responses | Code | Description | Schema | | ---- | ----------- | ------ | | 200 | Success | **application/json**: [SuggestedQuestionsResponse](#suggestedquestionsresponse)
| | 400 | Bad Request - Not a chat app or feature disabled | **application/json**: [CompletionRequestError](#completionrequesterror)
[ModelCurrentlyNotSupportError](#modelcurrentlynotsupporterror)
[NotChatAppError](#notchatapperror)
[ProviderNotInitializeError](#providernotinitializeerror)
[ProviderQuotaExceededError](#providerquotaexceedederror)
[ErrorResponse](#errorresponse)
| | 401 | Unauthorized | **application/json**: [ErrorResponse](#errorresponse)
| | 403 | Forbidden | **application/json**: [AppSuggestedQuestionsAfterAnswerDisabledError](#appsuggestedquestionsafteranswerdisablederror)
[ErrorResponse](#errorresponse)
| | 404 | Message Not Found or Conversation Not Found | **application/json**: [ErrorResponse](#errorresponse)
| | 500 | Internal Server Error | **application/json**: [ErrorResponse](#errorresponse)
| | default | Error | **application/json**: [ErrorResponse](#errorresponse)
| ### [GET] /meta **Get app meta** Retrieve the metadata for a specific app. #### Responses | Code | Description | Schema | | ---- | ----------- | ------ | | 200 | Success | **application/json**: [AppMetaResponse](#appmetaresponse)
| | 400 | Bad Request | **application/json**: [AppUnavailableError](#appunavailableerror)
[ErrorResponse](#errorresponse)
| | 401 | Unauthorized | **application/json**: [ErrorResponse](#errorresponse)
| | 404 | App Not Found | **application/json**: [ErrorResponse](#errorresponse)
| | 500 | Internal Server Error | **application/json**: [ErrorResponse](#errorresponse)
| | default | Error | **application/json**: [ErrorResponse](#errorresponse)
| ### [GET] /parameters **Retrieve app parameters** Retrieve the parameters for a specific app. #### Responses | Code | Description | Schema | | ---- | ----------- | ------ | | 200 | Success | **application/json**: [Parameters](#parameters)
| | 400 | Bad Request | **application/json**: [AgentNotPublishedError](#agentnotpublishederror)
[AppUnavailableError](#appunavailableerror)
[ErrorResponse](#errorresponse)
| | 401 | Unauthorized | **application/json**: [ErrorResponse](#errorresponse)
| | 404 | App Not Found | **application/json**: [ErrorResponse](#errorresponse)
| | 500 | Internal Server Error | **application/json**: [ErrorResponse](#errorresponse)
| | default | Error | **application/json**: [ErrorResponse](#errorresponse)
| ### [GET] /passport Get authentication passport for web application access #### Parameters | Name | Located in | Description | Required | Schema | | ---- | ---------- | ----------- | -------- | ------ | | user_id | query | End user session ID | No | string | #### Responses | Code | Description | Schema | | ---- | ----------- | ------ | | 200 | Passport retrieved successfully | **application/json**: [PassportAccessTokenResponse](#passportaccesstokenresponse)
| | 401 | Unauthorized - missing app code or invalid authentication | **application/json**: [ErrorResponse](#errorresponse)
| | 404 | Application or user not found | **application/json**: [ErrorResponse](#errorresponse)
| | default | Error | **application/json**: [ErrorResponse](#errorresponse)
| ### [POST] /remote-files/upload **Upload a file from a remote URL** Upload a file from a remote URL Downloads a file from the provided remote URL and uploads it to the platform storage for use in web applications. Args: app_model: The associated application model end_user: The end user making the request JSON Parameters: url: The remote URL to download the file from (required) Returns: dict: File information including ID, signed URL, and metadata int: HTTP status code 201 for success Raises: RemoteFileInvalidUrlError: Remote file URL is invalid RemoteFileUrlBlockedError: Remote file URL is blocked RemoteFileNotFoundError: Remote file does not exist RemoteFileAccessDeniedError: Remote file requires authorization RemoteFileUnavailableError: Remote file is unavailable RemoteFileInvalidResponseError: Remote file response is invalid FileTooLargeError: File exceeds size limit UnsupportedFileTypeError: File type not supported #### Request Body | Required | Schema | | -------- | ------ | | Yes | **application/json**: [RemoteFileUploadPayload](#remotefileuploadpayload)
| #### Responses | Code | Description | Schema | | ---- | ----------- | ------ | | 201 | Remote file uploaded successfully | **application/json**: [FileWithSignedUrl](#filewithsignedurl)
| | 400 | Invalid, blocked, or inaccessible remote file URL | **application/json**: [FileExtensionBlockedError](#fileextensionblockederror)
[RemoteFileAccessDeniedError](#remotefileaccessdeniederror)
[RemoteFileInvalidUrlError](#remotefileinvalidurlerror)
[RemoteFileUrlBlockedError](#remotefileurlblockederror)
[ErrorResponse](#errorresponse)
| | 404 | Remote file not found | **application/json**: [RemoteFileNotFoundError](#remotefilenotfounderror)
[ErrorResponse](#errorresponse)
| | 413 | File too large | **application/json**: [FileTooLargeError](#filetoolargeerror)
[ErrorResponse](#errorresponse)
| | 415 | Unsupported file type | **application/json**: [UnsupportedFileTypeError](#unsupportedfiletypeerror)
[ErrorResponse](#errorresponse)
| | 422 | Request payload validation failed | **application/json**: [ErrorResponse](#errorresponse)
| | 500 | Internal server error | **application/json**: [ErrorResponse](#errorresponse)
| | 502 | Remote file unavailable or returned an invalid response | **application/json**: [RemoteFileInvalidResponseError](#remotefileinvalidresponseerror)
[RemoteFileUnavailableError](#remotefileunavailableerror)
[ErrorResponse](#errorresponse)
| | default | Error | **application/json**: [ErrorResponse](#errorresponse)
| ### [GET] /remote-files/{url} **Get information about a remote file** Get information about a remote file Retrieves basic information about a file located at a remote URL, including content type and content length. Args: app_model: The associated application model end_user: The end user making the request url: URL-encoded path to the remote file Returns: dict: Remote file information including type and length Raises: HTTPException: If the remote file cannot be accessed #### Parameters | Name | Located in | Description | Required | Schema | | ---- | ---------- | ----------- | -------- | ------ | | url | path | | Yes | string | #### Responses | Code | Description | Schema | | ---- | ----------- | ------ | | 200 | Remote file information retrieved successfully | **application/json**: [RemoteFileInfo](#remotefileinfo)
| | 400 | Invalid, blocked, or inaccessible remote file URL | **application/json**: [RemoteFileAccessDeniedError](#remotefileaccessdeniederror)
[RemoteFileInvalidUrlError](#remotefileinvalidurlerror)
[RemoteFileUrlBlockedError](#remotefileurlblockederror)
[ErrorResponse](#errorresponse)
| | 404 | Remote file not found | **application/json**: [RemoteFileNotFoundError](#remotefilenotfounderror)
[ErrorResponse](#errorresponse)
| | 500 | Internal server error | **application/json**: [ErrorResponse](#errorresponse)
| | 502 | Remote file unavailable or returned an invalid response | **application/json**: [RemoteFileInvalidResponseError](#remotefileinvalidresponseerror)
[RemoteFileUnavailableError](#remotefileunavailableerror)
[ErrorResponse](#errorresponse)
| | default | Error | **application/json**: [ErrorResponse](#errorresponse)
| ### [GET] /saved-messages Retrieve paginated list of saved messages for a completion application. #### Parameters | Name | Located in | Description | Required | Schema | | ---- | ---------- | ----------- | -------- | ------ | | last_id | query | | No | string | | limit | query | | No | integer,
**Default:** 20 | #### Responses | Code | Description | Schema | | ---- | ----------- | ------ | | 200 | Success | **application/json**: [SavedMessageInfiniteScrollPagination](#savedmessageinfinitescrollpagination)
| | 400 | Bad Request - Not a completion app | **application/json**: [NotCompletionAppError](#notcompletionapperror)
[ErrorResponse](#errorresponse)
| | 401 | Unauthorized | **application/json**: [ErrorResponse](#errorresponse)
| | 404 | App Not Found | **application/json**: [ErrorResponse](#errorresponse)
| | 500 | Internal Server Error | **application/json**: [ErrorResponse](#errorresponse)
| | default | Error | **application/json**: [ErrorResponse](#errorresponse)
| ### [POST] /saved-messages Save a specific message for later reference. #### Parameters | Name | Located in | Description | Required | Schema | | ---- | ---------- | ----------- | -------- | ------ | | message_id | query | Message UUID to save | Yes | string | #### Request Body | Required | Schema | | -------- | ------ | | Yes | **application/json**: [SavedMessageCreatePayload](#savedmessagecreatepayload)
| #### Responses | Code | Description | Schema | | ---- | ----------- | ------ | | 200 | Message saved successfully | **application/json**: [ResultResponse](#resultresponse)
| | 400 | Bad Request - Not a completion app | **application/json**: [NotCompletionAppError](#notcompletionapperror)
[ErrorResponse](#errorresponse)
| | 401 | Unauthorized | **application/json**: [ErrorResponse](#errorresponse)
| | 404 | Message Not Found | **application/json**: [ErrorResponse](#errorresponse)
| | 500 | Internal Server Error | **application/json**: [ErrorResponse](#errorresponse)
| | default | Error | **application/json**: [ErrorResponse](#errorresponse)
| ### [DELETE] /saved-messages/{message_id} Remove a message from saved messages. #### Parameters | Name | Located in | Description | Required | Schema | | ---- | ---------- | ----------- | -------- | ------ | | message_id | path | Message UUID to delete | Yes | string (uuid) | #### Responses | Code | Description | Schema | | ---- | ----------- | ------ | | 204 | Message removed successfully | | | 400 | Bad Request - Not a completion app | **application/json**: [NotCompletionAppError](#notcompletionapperror)
[ErrorResponse](#errorresponse)
| | 401 | Unauthorized | **application/json**: [ErrorResponse](#errorresponse)
| | 404 | Message Not Found | **application/json**: [ErrorResponse](#errorresponse)
| | 500 | Internal Server Error | **application/json**: [ErrorResponse](#errorresponse)
| | default | Error | **application/json**: [ErrorResponse](#errorresponse)
| ### [GET] /site **Retrieve app site info** Retrieve app site information and configuration. #### Responses | Code | Description | Schema | | ---- | ----------- | ------ | | 200 | Success | **application/json**: [WebAppSiteResponse](#webappsiteresponse)
| | 400 | Bad Request | **application/json**: [ErrorResponse](#errorresponse)
| | 401 | Unauthorized | **application/json**: [ErrorResponse](#errorresponse)
| | 403 | Forbidden | **application/json**: [ErrorResponse](#errorresponse)
| | 404 | App Not Found | **application/json**: [ErrorResponse](#errorresponse)
| | 500 | Internal Server Error | **application/json**: [ErrorResponse](#errorresponse)
| | default | Error | **application/json**: [ErrorResponse](#errorresponse)
| ### [GET] /system-features **Get the non-sensitive bootstrap snapshot exposed before authentication** Get the non-sensitive bootstrap snapshot exposed before Console or Web authentication. This is not a general feature registry. This endpoint is akin to the `SystemFeatureApi` endpoint in api/controllers/console/feature.py, except it is intended for use by the web app, instead of the console dashboard. Authentication configuration must be available before the authentication flow can be selected. #### Responses | Code | Description | Schema | | ---- | ----------- | ------ | | 200 | System features retrieved successfully | **application/json**: [SystemFeatureModel](#systemfeaturemodel)
| | 500 | Internal server error | **application/json**: [ErrorResponse](#errorresponse)
| | default | Error | **application/json**: [ErrorResponse](#errorresponse)
| ### [POST] /text-to-audio **Convert text to audio** Convert text to audio using text-to-speech service. #### Request Body | Required | Schema | | -------- | ------ | | Yes | **application/json**: [TextToAudioPayload](#texttoaudiopayload)
| #### Responses | Code | Description | Schema | | ---- | ----------- | ------ | | 200 | Success | | | 400 | Bad Request | **application/json**: [AppUnavailableError](#appunavailableerror)
[CompletionRequestError](#completionrequesterror)
[ModelCurrentlyNotSupportError](#modelcurrentlynotsupporterror)
[ProviderNotInitializeError](#providernotinitializeerror)
[ProviderQuotaExceededError](#providerquotaexceedederror)
[ErrorResponse](#errorresponse)
| | 401 | Unauthorized | **application/json**: [ErrorResponse](#errorresponse)
| | 500 | Internal Server Error | **application/json**: [ErrorResponse](#errorresponse)
| | default | Error | **application/json**: [ErrorResponse](#errorresponse)
| ### [GET] /webapp/access-mode Retrieve the access mode for a web application (public or restricted). #### Parameters | Name | Located in | Description | Required | Schema | | ---- | ---------- | ----------- | -------- | ------ | | appCode | query | Application code | No | string | | appId | query | Application ID | No | string | #### Responses | Code | Description | Schema | | ---- | ----------- | ------ | | 200 | Success | **application/json**: [AccessModeResponse](#accessmoderesponse)
| | 400 | Bad Request | **application/json**: [InvalidParamError](#invalidparamerror)
[ErrorResponse](#errorresponse)
| | 404 | App Not Found | **application/json**: [ErrorResponse](#errorresponse)
| | 500 | Internal Server Error | **application/json**: [ErrorResponse](#errorresponse)
| | 503 | Web App Access Service Unavailable | **application/json**: [ErrorResponse](#errorresponse)
| | default | Error | **application/json**: [ErrorResponse](#errorresponse)
| ### [GET] /webapp/permission Check if user has permission to access a web application. #### Parameters | Name | Located in | Description | Required | Schema | | ---- | ---------- | ----------- | -------- | ------ | | appId | query | Application ID | Yes | string | #### Responses | Code | Description | Schema | | ---- | ----------- | ------ | | 200 | Success | **application/json**: [BooleanResultResponse](#booleanresultresponse)
| | 400 | Bad Request | **application/json**: [ErrorResponse](#errorresponse)
| | 401 | Unauthorized | **application/json**: [ErrorResponse](#errorresponse)
| | 500 | Internal Server Error | **application/json**: [ErrorResponse](#errorresponse)
| | 503 | Web App Access Service Unavailable | **application/json**: [ErrorResponse](#errorresponse)
| | default | Error | **application/json**: [ErrorResponse](#errorresponse)
| ### [POST] /workflows/run **Run workflow** Execute a workflow with provided inputs and files. #### Request Body | Required | Schema | | -------- | ------ | | Yes | **application/json**: [WorkflowRunPayload](#workflowrunpayload)
| #### Responses | Code | Description | Schema | | ---- | ----------- | ------ | | 200 | Success | **application/json**: [GeneratedAppResponse](#generatedappresponse)
| | 400 | Bad Request | **application/json**: [CompletionRequestError](#completionrequesterror)
[ModelCurrentlyNotSupportError](#modelcurrentlynotsupporterror)
[NotWorkflowAppError](#notworkflowapperror)
[ProviderNotInitializeError](#providernotinitializeerror)
[ProviderQuotaExceededError](#providerquotaexceedederror)
[ErrorResponse](#errorresponse)
| | 401 | Unauthorized | **application/json**: [ErrorResponse](#errorresponse)
| | 403 | Forbidden | **application/json**: [TriggerWorkflowServiceModeUnavailableError](#triggerworkflowservicemodeunavailableerror)
[ErrorResponse](#errorresponse)
| | 404 | App Not Found | **application/json**: [ErrorResponse](#errorresponse)
| | 429 | Too Many Requests | **application/json**: [RateLimitError](#ratelimiterror)
[ErrorResponse](#errorresponse)
| | 500 | Internal Server Error | **application/json**: [ErrorResponse](#errorresponse)
| | default | Error | **application/json**: [ErrorResponse](#errorresponse)
| ### [POST] /workflows/tasks/{task_id}/stop **Stop workflow task** Stop a running workflow task. #### Parameters | Name | Located in | Description | Required | Schema | | ---- | ---------- | ----------- | -------- | ------ | | task_id | path | Task ID to stop | Yes | string | #### Responses | Code | Description | Schema | | ---- | ----------- | ------ | | 200 | Success | **application/json**: [SimpleResultResponse](#simpleresultresponse)
| | 400 | Bad Request | **application/json**: [NotWorkflowAppError](#notworkflowapperror)
[ErrorResponse](#errorresponse)
| | 401 | Unauthorized | **application/json**: [ErrorResponse](#errorresponse)
| | 404 | Task Not Found | **application/json**: [ErrorResponse](#errorresponse)
| | 500 | Internal Server Error | **application/json**: [ErrorResponse](#errorresponse)
| | default | Error | **application/json**: [ErrorResponse](#errorresponse)
| --- ## default Default namespace ### [GET] /workflow/{task_id}/events **Get workflow execution events stream after resume** GET /api/workflow//events Returns Server-Sent Events stream. #### Parameters | Name | Located in | Description | Required | Schema | | ---- | ---------- | ----------- | -------- | ------ | | task_id | path | | Yes | string | #### Responses | Code | Description | Schema | | ---- | ----------- | ------ | | 200 | SSE event stream | **application/json**: [EventStreamResponse](#eventstreamresponse)
| | 400 | Bad Request | **application/json**: [InvalidParamError](#invalidparamerror)
[ErrorResponse](#errorresponse)
| | default | Error | **application/json**: [ErrorResponse](#errorresponse)
| --- ### Schemas #### AccessModeResponse | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | accessMode | string | | Yes | #### AccessTokenData | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | access_token | string | | Yes | #### AccessTokenResultResponse | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | data | [AccessTokenData](#accesstokendata) | | Yes | | result | string | | Yes | #### AccountBannedError Account is banned. | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | AccountBannedError | | Account is banned. | | #### AgentNotPublishedError Agent has not been published. Please publish the Agent before using the web app. | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | AgentNotPublishedError | | Agent has not been published. Please publish the Agent before using the web app. | | #### AgentThought | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | answer | string | | No | | chain_id | string | | No | | created_at | integer | | No | | files | [ string ] | | Yes | | id | string | | Yes | | message_id | string | | Yes | | observation | string | | No | | position | integer | | Yes | | thought | string | | No | | tool | string | | No | | tool_input | string | | No | | tool_labels | [JSONValue](#jsonvalue) | Labels for tools used. | Yes | #### AppAccessModeQuery | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | appCode | string | Application code | No | | appId | string | Application ID | No | #### AppMetaResponse | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | tool_icons | object | Tool icon metadata keyed by tool name | No | #### AppMode | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | AppMode | string | | | #### AppMoreLikeThisDisabledError The 'More like this' feature is disabled. Please refresh your page. | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | AppMoreLikeThisDisabledError | | The 'More like this' feature is disabled. Please refresh your page. | | #### AppPermissionQuery | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | appId | string | Application ID | Yes | #### AppSuggestedQuestionsAfterAnswerDisabledError The 'Suggested Questions After Answer' feature is disabled. Please refresh your page. | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | AppSuggestedQuestionsAfterAnswerDisabledError | | The 'Suggested Questions After Answer' feature is disabled. Please refresh your page. | | #### AppUnavailableError App unavailable, please check your app configurations. | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | AppUnavailableError | | App unavailable, please check your app configurations. | | #### AudioToTextResponse | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | text | string | | Yes | #### AudioTooLargeError Audio size exceeded. {message} | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | AudioTooLargeError | | Audio size exceeded. {message} | | #### AuthenticationFailedError Invalid email or password. | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | AuthenticationFailedError | | Invalid email or password. | | #### BooleanResultResponse | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | result | boolean | | Yes | #### BrandingModel | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | application_title | string | | Yes | | enabled | boolean | | Yes | | favicon | string | | Yes | | login_page_logo | string | | Yes | | workspace_logo | string | | Yes | #### ButtonStyle Button styles for user actions. | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | ButtonStyle | string | Button styles for user actions. | | #### ChatMessagePayload | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | conversation_id | string | Conversation ID | No | | files | [ object ] | Files to be processed | No | | inputs | object | Input variables for the chat | Yes | | parent_message_id | string | Parent message ID | No | | query | string | User query/message | Yes | | response_mode | string,
**Available values:** "blocking", "streaming" | Response mode: blocking or streaming | No | | retriever_from | string,
**Default:** web_app | Source of retriever | No | #### CompletionMessagePayload | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | files | [ object ] | Files to be processed | No | | inputs | object | Input variables for the completion | Yes | | query | string | Query text for completion | No | | response_mode | string,
**Available values:** "blocking", "streaming" | Response mode: blocking or streaming | No | | retriever_from | string,
**Default:** web_app | Source of retriever | No | #### CompletionRequestError Completion request failed. | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | CompletionRequestError | | Completion request failed. | | #### ConversationInfiniteScrollPagination | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | data | [ [SimpleConversation](#simpleconversation) ] | | Yes | | has_more | boolean | | Yes | | limit | integer | | Yes | #### ConversationListQuery | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | last_id | string | | No | | limit | integer,
**Default:** 20 | | No | | pinned | boolean | | No | | sort_by | string,
**Available values:** "-created_at", "-updated_at", "created_at", "updated_at",
**Default:** -updated_at | *Enum:* `"-created_at"`, `"-updated_at"`, `"created_at"`, `"updated_at"` | No | #### ConversationRenamePayload | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | auto_generate | boolean | Automatically generate the conversation name. When `true`, the `name` field is ignored. | No | | name | string | Conversation name. Required when `auto_generate` is `false`. | No | #### DeploymentEdition Enum representing the deployment edition of the platform. | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | DeploymentEdition | string | Enum representing the deployment edition of the platform. | | #### EmailCodeError Email code is invalid or expired. | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | EmailCodeError | | Email code is invalid or expired. | | #### EmailCodeLoginSendPayload | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | email | string | | Yes | | language | string | | No | #### EmailCodeLoginVerifyPayload | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | code | string | | Yes | | email | string | | Yes | | token | string | | Yes | #### EmailPasswordResetLimitError Too many failed password reset attempts. Please try again in 24 hours. | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | EmailPasswordResetLimitError | | Too many failed password reset attempts. Please try again in 24 hours. | | #### EmailSendIpLimitError Too many emails have been sent from this IP address recently. Please try again later. | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | EmailSendIpLimitError | | Too many emails have been sent from this IP address recently. Please try again later. | | #### ErrorResponse Documented non-2xx body emitted by ``register_external_error_handlers``. ``params`` and ``details`` appear only on the errors that set them. The schema stays open because ``HTTPException.data`` may carry extra keys. | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | code | string | | Yes | | details | object | | No | | message | string | | Yes | | params | string | | No | | status | integer | | Yes | #### EventStreamResponse | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | EventStreamResponse | string | | | #### ExecutionContentType | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | ExecutionContentType | string | | | #### FileExtensionBlockedError The file extension is blocked for security reasons. | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | FileExtensionBlockedError | | The file extension is blocked for security reasons. | | #### FileInputConfig | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | allowed_file_extensions | [ string ] | | No | | allowed_file_types | [ [FileType](#filetype) ] | | No | | allowed_file_upload_methods | [ [FileTransferMethod](#filetransfermethod) ] | | No | | output_variable_name | string | | Yes | | type | string | | No | #### FileListInputConfig | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | allowed_file_extensions | [ string ] | | No | | allowed_file_types | [ [FileType](#filetype) ] | | No | | allowed_file_upload_methods | [ [FileTransferMethod](#filetransfermethod) ] | | No | | number_limits | integer | | No | | output_variable_name | string | | Yes | | type | string | | No | #### FileResponse | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | conversation_id | string | | No | | created_at | integer | | No | | created_by | string | | No | | extension | string | | No | | file_key | string | | No | | id | string (uuid) | | Yes | | mime_type | string | | No | | name | string | | Yes | | original_url | string | | No | | preview_url | string | | No | | reference | string | | No | | size | integer | | Yes | | source_url | string | | No | | tenant_id | string | | No | | user_id | string | | No | #### FileTooLargeError File size exceeded. {message} | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | FileTooLargeError | | File size exceeded. {message} | | #### FileTransferMethod | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | FileTransferMethod | string | | | #### FileType | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | FileType | string | | | #### FileWithSignedUrl | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | created_at | integer | | Yes | | created_by | string | | Yes | | extension | string | | Yes | | id | string | | Yes | | mime_type | string | | Yes | | name | string | | Yes | | size | integer | | Yes | | url | string | | Yes | #### FilenameNotExistsError The specified filename does not exist. | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | FilenameNotExistsError | | The specified filename does not exist. | | #### ForgotPasswordCheckPayload | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | code | string | | Yes | | email | string | | Yes | | token | string | | Yes | #### ForgotPasswordResetPayload | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | new_password | string | | Yes | | password_confirm | string | | Yes | | token | string | | Yes | #### ForgotPasswordSendPayload | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | email | string | | Yes | | language | string | | No | #### FormInputConfig | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | FormInputConfig | [ParagraphInputConfig](#paragraphinputconfig)
[SelectInputConfig](#selectinputconfig)
[FileInputConfig](#fileinputconfig)
[FileListInputConfig](#filelistinputconfig) | | | #### GeneratedAppResponse | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | GeneratedAppResponse | | | | #### HumanInputContent | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | form_definition | [HumanInputFormDefinition](#humaninputformdefinition) | | No | | form_submission_data | [HumanInputFormSubmissionData](#humaninputformsubmissiondata) | | No | | submitted | boolean | | Yes | | type | [ExecutionContentType](#executioncontenttype) | | No | | workflow_run_id | string | | Yes | #### HumanInputFileUploadFormPayload Parsed multipart form fields for HITL uploads. | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | url | string | Remote file URL | No | #### HumanInputFormDefinition | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | actions | [ [UserActionConfig](#useractionconfig) ] | | No | | display_in_ui | boolean | | No | | expiration_time | integer | | Yes | | form_content | string | | Yes | | form_id | string | | Yes | | form_token | string | | No | | inputs | [ [FormInputConfig](#forminputconfig) ] | | No | | node_id | string | | Yes | | node_title | string | | Yes | | resolved_default_values | object | | No | #### HumanInputFormDefinitionResponse | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | expiration_time | integer | | Yes | | form_content | string | | Yes | | inputs | [ [FormInputConfig](#forminputconfig) ] | | Yes | | resolved_default_values | object | | Yes | | site | [WebAppSiteResponse](#webappsiteresponse) | | No | | user_actions | [ [UserActionConfig](#useractionconfig) ] | | Yes | #### HumanInputFormExpiredError | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | HumanInputFormExpiredError | | | | #### HumanInputFormSubmissionData | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | action_id | string | | Yes | | action_text | string | | Yes | | node_id | string | | Yes | | node_title | string | | Yes | | rendered_content | string | | Yes | | submitted_data | object | | No | #### HumanInputFormSubmitPayload | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | action | string | ID of the action button the recipient selected. Must match one of the `id` values from the form's `user_actions` list. | Yes | | inputs | object | Submitted human input values keyed by output variable name. Use a string for paragraph or select input values, a file mapping for file inputs, and a list of file mappings for file-list inputs. Local file mappings use `transfer_method=local_file` with `upload_file_id`; remote file mappings use `transfer_method=remote_url` with `url` or `remote_url`. | Yes | #### HumanInputFormSubmitResponse | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | #### HumanInputFormSubmittedError This form has already been submitted by another user, form_id={form_id} | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | HumanInputFormSubmittedError | | This form has already been submitted by another user, form_id={form_id} | | #### HumanInputUploadTokenResponse | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | expires_at | integer | | Yes | | upload_token | string | | Yes | #### InvalidEmailError The email address is not valid. | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | InvalidEmailError | | The email address is not valid. | | #### InvalidFormDataError | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | InvalidFormDataError | | | | #### InvalidOrExpiredTokenError The token is invalid or has expired. | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | InvalidOrExpiredTokenError | | The token is invalid or has expired. | | #### InvalidParamError | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | InvalidParamError | | | | #### InvalidUploadTokenError Upload token is invalid or expired. | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | InvalidUploadTokenError | | Upload token is invalid or expired. | | #### JSONValue | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | JSONValue | string
integer
number
boolean
object
[ object ] | | | #### JSONValueType | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | JSONValueType | | | | #### JsonValue | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | JsonValue | | | | #### LicenseStatus | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | LicenseStatus | string | | | #### LicenseStatusModel | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | status | [LicenseStatus](#licensestatus) | | Yes | #### LoginPayload | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | email | string | | Yes | | password | string | | Yes | #### LoginStatusQuery | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | app_code | string | Web app code | No | | user_id | string | End user session ID | No | #### LoginStatusResponse | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | app_logged_in | boolean | | Yes | | logged_in | boolean | | Yes | #### MalformedUploadTokenError The upload token is malformed. | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | MalformedUploadTokenError | | The upload token is malformed. | | #### MessageFeedbackPayload | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | content | string | Optional text feedback providing additional detail. | No | | rating | string,
**Available values:** "dislike", "like" | Feedback rating. Set to `null` to revoke previously submitted feedback. | No | #### MessageFile | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | belongs_to | string | | No | | filename | string | | Yes | | id | string (uuid) | | Yes | | mime_type | string | | No | | size | integer | | No | | transfer_method | string | | Yes | | type | string | | Yes | | upload_file_id | string | | No | | url | string | | No | #### MessageListQuery | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | conversation_id | string | Conversation ID. | Yes | | first_id | string | The ID of the first chat record on the current page. Omit this value to fetch the latest messages; for subsequent pages, use the first message ID from the current list to fetch older messages. | No | | limit | integer,
**Default:** 20 | Number of chat history messages to return per request. | No | #### MessageMoreLikeThisQuery | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | response_mode | string,
**Available values:** "blocking", "streaming" | Response mode
*Enum:* `"blocking"`, `"streaming"` | Yes | #### ModelCurrentlyNotSupportError Dify Hosted OpenAI trial currently not support the GPT-4 model. | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | ModelCurrentlyNotSupportError | | Dify Hosted OpenAI trial currently not support the GPT-4 model. | | #### NoAudioUploadedError Please upload your audio. | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | NoAudioUploadedError | | Please upload your audio. | | #### NoFileUploadedError Please upload your file. | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | NoFileUploadedError | | Please upload your file. | | #### NotChatAppError Please check if your app mode matches the right API route. | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | NotChatAppError | | Please check if your app mode matches the right API route. | | #### NotCompletionAppError Please check if your Completion app mode matches the right API route. | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | NotCompletionAppError | | Please check if your Completion app mode matches the right API route. | | #### NotWorkflowAppError Please check if your Workflow app mode matches the right API route. | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | NotWorkflowAppError | | Please check if your Workflow app mode matches the right API route. | | #### ParagraphInputConfig Form input definition. | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | default | [StringSource](#stringsource) | Raw default-value configuration for the paragraph input. Runtime-resolved values are exposed in the surrounding `resolved_default_values` mapping. | No | | output_variable_name | string | | Yes | | type | string | | No | #### Parameters | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | annotation_reply | { **"enabled"**: boolean } | | Yes | | file_upload | { **"allowed_file_extensions"**: [ string ], **"allowed_file_types"**: [ string,
**Available values:** "audio", "custom", "document", "image", "video" ], **"allowed_file_upload_methods"**: [ string,
**Available values:** "local_file", "remote_url" ], **"enabled"**: boolean, **"image"**: { **"detail"**: string, **"enabled"**: boolean, **"number_limits"**: integer, **"transfer_methods"**: [ string ] }, **"number_limits"**: integer } | | Yes | | more_like_this | { **"enabled"**: boolean } | | Yes | | opening_statement | | | No | | retriever_resource | { **"enabled"**: boolean } | | Yes | | sensitive_word_avoidance | { **"enabled"**: boolean } | | Yes | | speech_to_text | { **"enabled"**: boolean } | | Yes | | suggested_questions | [ string ] | | Yes | | suggested_questions_after_answer | { **"enabled"**: boolean } | | Yes | | system_parameters | [SystemParameters](#systemparameters) | System-level parameter limits. | Yes | | text_to_speech | { **"autoPlay"**: string, **"enabled"**: boolean, **"language"**: string, **"voice"**: string } | | Yes | | user_input_form | [ object ] | | Yes | #### PassportAccessTokenResponse | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | access_token | string | | Yes | #### PassportQuery | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | user_id | string | End user session ID | No | #### PasswordMismatchError The passwords do not match. | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | PasswordMismatchError | | The passwords do not match. | | #### PasswordResetRateLimitExceededError Too many password reset emails have been sent. Please try again in {minutes} minutes. | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | PasswordResetRateLimitExceededError | | Too many password reset emails have been sent. Please try again in {minutes} minutes. | | #### PluginInstallationPermissionModel | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | plugin_installation_scope | [PluginInstallationScope](#plugininstallationscope) | | Yes | | restrict_to_marketplace_only | boolean | | Yes | #### PluginInstallationScope | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | PluginInstallationScope | string | | | #### ProviderNotInitializeError No valid model provider credentials found. Please go to Settings -> Model Provider to complete your provider credentials. | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | ProviderNotInitializeError | | No valid model provider credentials found. Please go to Settings -> Model Provider to complete your provider credentials. | | #### ProviderNotSupportSpeechToTextError Provider not support speech to text. | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | ProviderNotSupportSpeechToTextError | | Provider not support speech to text. | | #### ProviderQuotaExceededError Your quota for Dify Hosted OpenAI has been exhausted. Please go to Settings -> Model Provider to complete your own provider credentials. | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | ProviderQuotaExceededError | | Your quota for Dify Hosted OpenAI has been exhausted. Please go to Settings -> Model Provider to complete your own provider credentials. | | #### RateLimitError Rate Limit Error | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | RateLimitError | | Rate Limit Error | | #### RemoteFileAccessDeniedError The remote file cannot be accessed without authorization. | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | RemoteFileAccessDeniedError | | The remote file cannot be accessed without authorization. | | #### RemoteFileInfo | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | file_length | integer | | Yes | | file_type | string | | Yes | #### RemoteFileInvalidResponseError The remote file server returned an invalid response. | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | RemoteFileInvalidResponseError | | The remote file server returned an invalid response. | | #### RemoteFileInvalidUrlError The remote file URL is invalid. | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | RemoteFileInvalidUrlError | | The remote file URL is invalid. | | #### RemoteFileNotFoundError The remote file could not be found. | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | RemoteFileNotFoundError | | The remote file could not be found. | | #### RemoteFileUnavailableError The remote file is temporarily unavailable. | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | RemoteFileUnavailableError | | The remote file is temporarily unavailable. | | #### RemoteFileUploadPayload | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | url | string (uri) | Remote file URL | Yes | #### RemoteFileUrlBlockedError The remote file URL is not allowed. | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | RemoteFileUrlBlockedError | | The remote file URL is not allowed. | | #### ResultResponse | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | result | string | | Yes | #### RetrieverResource | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | content | string | | No | | created_at | integer | | No | | data_source_type | string | | No | | dataset_id | string | | No | | dataset_name | string | | No | | doc_metadata | object | | No | | document_id | string | | No | | document_name | string | | No | | files | [ object ] | | No | | hit_count | integer | | No | | id | string (uuid) | | No | | index_node_hash | string | | No | | message_id | string (uuid) | | No | | page | integer | | No | | position | integer | | Yes | | retriever_from | string | | No | | score | number | | No | | segment_id | string | | No | | segment_position | integer | | No | | summary | string | | No | | title | string | | No | | word_count | integer | | No | #### SSOProtocol | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | SSOProtocol | string | | | #### SavedMessageCreatePayload | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | message_id | string | | Yes | #### SavedMessageInfiniteScrollPagination | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | data | [ [SavedMessageItem](#savedmessageitem) ] | | Yes | | has_more | boolean | | Yes | | limit | integer | | Yes | #### SavedMessageItem | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | answer | string | | Yes | | created_at | integer | | No | | feedback | [SimpleFeedback](#simplefeedback) | | No | | id | string | | Yes | | inputs | object | | Yes | | message_files | [ [MessageFile](#messagefile) ] | | Yes | | query | string | | Yes | #### SavedMessageListQuery | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | last_id | string | | No | | limit | integer,
**Default:** 20 | | No | #### SelectInputConfig | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | option_source | [StringListSource](#stringlistsource) | Source of options for `select` inputs. Present only when `type` is `select`. | Yes | | output_variable_name | string | | Yes | | type | string | | No | #### SimpleConversation | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | created_at | integer | | No | | id | string (uuid) | | Yes | | inputs | object | | Yes | | introduction | string | | No | | name | string | | Yes | | status | string | | Yes | | updated_at | integer | | No | #### SimpleFeedback | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | rating | string | | No | #### SimpleResultDataResponse | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | data | string | | Yes | | result | string | | Yes | #### SimpleResultResponse | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | result | string | Operation result. | Yes | #### SpeechToTextDisabledError Speech to text is disabled. | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | SpeechToTextDisabledError | | Speech to text is disabled. | | #### StringListSource | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | selector | [ string ] | Variable reference path when `type` is `variable`. | No | | type | [ValueSourceType](#valuesourcetype) | Origin of the options. `constant` means `value` lists the options literally; `variable` means `selector` points to an `array[string]` workflow variable that provides them. | Yes | | value | [ string ] | Literal option list when `type` is `constant`. | No | #### StringSource Default configuration for form inputs. | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | selector | [ string ] | | No | | type | [ValueSourceType](#valuesourcetype) | | Yes | | value | string | | No | #### SuggestedQuestionsResponse | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | data | [ string ] | | Yes | #### SystemFeatureModel Non-sensitive bootstrap snapshot exposed before Console or Web authentication. | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | branding | [BrandingModel](#brandingmodel) | | Yes | | deployment_edition | [DeploymentEdition](#deploymentedition) | | Yes | | enable_app_deploy | boolean | | Yes | | enable_change_email | boolean,
**Default:** true | | Yes | | enable_collaboration_mode | boolean,
**Default:** true | | Yes | | enable_creators_platform | boolean | | Yes | | enable_email_code_login | boolean | | Yes | | enable_email_password_login | boolean,
**Default:** true | | Yes | | enable_explore_banner | boolean | | Yes | | enable_learn_app | boolean,
**Default:** true | | Yes | | enable_marketplace | boolean | | Yes | | enable_social_oauth_login | boolean | | Yes | | enable_step_by_step_tour | boolean | | Yes | | is_allow_register | boolean | | Yes | | is_email_setup | boolean | | Yes | | knowledge_fs_enabled | boolean | | Yes | | license | [LicenseStatusModel](#licensestatusmodel) | | Yes | | plugin_installation_permission | [PluginInstallationPermissionModel](#plugininstallationpermissionmodel) | | Yes | | rbac_enabled | boolean | | Yes | | sso_enforced_for_signin | boolean | | Yes | | sso_enforced_for_signin_protocol | [SSOProtocol](#ssoprotocol) | | Yes | | webapp_auth | [WebAppAuthModel](#webappauthmodel) | | Yes | #### SystemParameters | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | audio_file_size_limit | integer | | Yes | | file_size_limit | integer | | Yes | | image_file_size_limit | integer | | Yes | | video_file_size_limit | integer | | Yes | | workflow_file_upload_limit | integer | | Yes | #### TextToAudioPayload | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | message_id | string | Message ID. Takes priority over `text` when both are provided. | No | | streaming | boolean | Reserved for compatibility; TTS response streaming is determined by the provider output. | No | | text | string | Speech content to convert. | No | | voice | string | Voice to use for text-to-speech. Available voices depend on the TTS provider configured for this app. Omit to use the app's configured voice when available; that value is exposed by [Get App Parameters](/api-reference/applications/get-app-parameters) as `text_to_speech.voice`. | No | #### TooManyFilesError Only one file is allowed. | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | TooManyFilesError | | Only one file is allowed. | | #### TriggerWorkflowServiceModeUnavailableError This workflow uses a trigger entry and cannot be invoked through Web App, Service API, OpenAPI, or MCP. | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | TriggerWorkflowServiceModeUnavailableError | | This workflow uses a trigger entry and cannot be invoked through Web App, Service API, OpenAPI, or MCP. | | #### UnsupportedAudioTypeError Audio type not allowed. | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | UnsupportedAudioTypeError | | Audio type not allowed. | | #### UnsupportedFileTypeError File type not allowed. | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | UnsupportedFileTypeError | | File type not allowed. | | #### UploadTokenRequiredError Upload token is required. | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | UploadTokenRequiredError | | Upload token is required. | | #### UserActionConfig User action configuration. | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | button_style | [ButtonStyle](#buttonstyle) | | No | | id | string | | Yes | | title | string | | Yes | #### ValueSourceType ValueSourceType records whether the value comes from a static setting in form definition, or a variable while the workflow is running. | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | ValueSourceType | string | ValueSourceType records whether the value comes from a static setting in form definition, or a variable while the workflow is running. | | #### VerificationTokenResponse | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | email | string | | Yes | | is_valid | boolean | | Yes | | token | string | | Yes | #### WebAppAuthModel | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | allow_email_code_login | boolean | | Yes | | allow_email_password_login | boolean | | Yes | | allow_public_access | boolean,
**Default:** true | | Yes | | allow_sso | boolean | | Yes | | enabled | boolean | | Yes | | sso_config | [WebAppAuthSSOModel](#webappauthssomodel) | | Yes | #### WebAppAuthSSOModel | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | protocol | [SSOProtocol](#ssoprotocol) | | Yes | #### WebAppCustomConfigResponse | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | remove_webapp_brand | boolean | | Yes | | replace_webapp_logo | string | | No | #### WebAppSiteResponse | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | app_id | string | | Yes | | can_replace_logo | boolean | | Yes | | custom_config | [WebAppCustomConfigResponse](#webappcustomconfigresponse) | | No | | enable_site | boolean | | Yes | | end_user_id | string | | No | | mode | [AppMode](#appmode) | | Yes | | model_config | [WebModelConfigResponse](#webmodelconfigresponse) | | No | | plan | string | | Yes | | site | [WebSiteResponse](#websiteresponse) | | Yes | #### WebFormRateLimitExceededError Too many form requests. Please try again later. | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | WebFormRateLimitExceededError | | Too many form requests. Please try again later. | | #### WebMessageInfiniteScrollPagination | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | data | [ [WebMessageListItem](#webmessagelistitem) ] | | Yes | | has_more | boolean | | Yes | | limit | integer | | Yes | #### WebMessageListItem | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | agent_thoughts | [ [AgentThought](#agentthought) ] | | Yes | | answer | string | | Yes | | answer_tokens | integer | | No | | conversation_id | string (uuid) | | Yes | | created_at | integer | | No | | currency | string | | No | | error | string | | No | | extra_contents | [ [HumanInputContent](#humaninputcontent) ] | | Yes | | feedback | [SimpleFeedback](#simplefeedback) | | No | | id | string (uuid) | | Yes | | inputs | object | | Yes | | message_files | [ [MessageFile](#messagefile) ] | | Yes | | message_tokens | integer | | No | | metadata | [JSONValueType](#jsonvaluetype) | | No | | parent_message_id | string | | No | | provider_response_latency | float | | No | | query | string | | Yes | | retriever_resources | [ [RetrieverResource](#retrieverresource) ] | | Yes | | status | string | | Yes | | total_price | string | | No | | total_tokens | integer | | Yes | #### WebModelConfigResponse | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | model | | | No | | more_like_this | | | No | | opening_statement | string | | No | | pre_prompt | string | | No | | suggested_questions | | | No | | suggested_questions_after_answer | | | No | | user_input_form | | | No | #### WebSiteResponse | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | chat_color_theme | string | | No | | chat_color_theme_inverted | boolean | | Yes | | copyright | string | | No | | custom_disclaimer | string | | No | | default_language | string | | No | | description | string | | No | | icon | string | | No | | icon_background | string | | No | | icon_type | string | | No | | icon_url | string | | No | | input_placeholder | string | | No | | privacy_policy | string | | No | | prompt_public | boolean | | No | | show_workflow_steps | boolean | | No | | title | string | | Yes | | use_icon_as_answer_icon | boolean | | No | #### WorkflowRunPayload | Name | Type | Description | Required | | ---- | ---- | ----------- | -------- | | files | [ object
object
object
object ] | File list for workflow system file inputs. Available when file upload is enabled for the workflow. To attach a local file, first upload it via [Upload File](/api-reference/files/upload-file) and use the returned `id` as `upload_file_id` with `transfer_method: local_file`. | No | | inputs | object | Key-value pairs for workflow input variables. Values for file-type variables should be arrays of file objects with `type`, `transfer_method`, and either `url` or `upload_file_id`. Refer to the `user_input_form` field in the [Get App Parameters](/api-reference/applications/get-app-parameters) response to discover the variable names and types expected by your app. | Yes |