Chatbot
Chat applications support session persistence, allowing previous chat history to be used as context for responses. This can be applicable for chatbot, customer service AI, etc.
Base URL
Authentication
The Service API uses API-Key
authentication.
For all API requests, include your API Key in the Authorization
HTTP Header, as shown below:
POST /chat-messages Send Chat Message
Send a request to the chat application.
Request Body
query
(string): User Input/Question content.inputs
(object, optional, default{}
): Allows the entry of various variable values defined by the App. Theinputs
parameter contains multiple key/value pairs, with each key corresponding to a specific variable and each value being the specific value for that variable.response_mode
(string): The mode of response return, supporting:streaming
: Streaming mode (recommended), implements a typewriter-like output through SSE (Server-Sent Events).blocking
: Blocking mode, returns result after execution is complete. (Requests may be interrupted if the process is long). Due to Cloudflare restrictions, the request will be interrupted without a return after 100 seconds. Note: blocking mode is not supported in Agent Assistant mode.
user
(string): User identifier, used to define the identity of the end-user for retrieval and statistics. Should be uniquely defined by the developer within the application.conversation_id
(string, optional): Conversation ID. To continue the conversation based on previous chat records, it is necessary to pass the previous message’sconversation_id
.files
(array[object], optional): File list, suitable for inputting files (images) combined with text understanding and answering questions, available only when the model supports Vision capability.type
(string): Supported type:image
(currently only supports image type).transfer_method
(string): Transfer method,remote_url
for image URL /local_file
for file upload.url
(string, conditional): Image URL (when the transfer method isremote_url
).upload_file_id
(string, conditional): Uploaded file ID, which must be obtained by uploading through the File Upload API in advance (when the transfer method islocal_file
).
auto_generate_name
(bool, optional, defaulttrue
): Auto-generate title. If set tofalse
, can achieve async title generation by calling the conversation rename API and settingauto_generate
totrue
.
Response
When response_mode
is blocking
, returns a ChatCompletionResponse
object.
When response_mode
is streaming
, returns a ChunkChatCompletionResponse
stream.
ChatCompletionResponse
Returns the complete App result, Content-Type
is application/json
.
event
(string): Event type, fixed asmessage
.task_id
(string): Task ID, used for request tracking and the Stop Generate API.id
(string): Unique ID.message_id
(string): Unique message ID.conversation_id
(string): Conversation ID.mode
(string): App mode, fixed aschat
.answer
(string): Complete response content.metadata
(object): Metadata.usage
(Usage): Model usage information.retriever_resources
(array[RetrieverResource]): Citation and Attribution List.
created_at
(int): Message creation timestamp, e.g.,1705395332
.
ChunkChatCompletionResponse
Returns the stream chunks outputted by the App, Content-Type
is text/event-stream
.
Each streaming chunk starts with data:
, separated by two newline characters \n\n
, as shown below:
The structure of the streaming chunks varies depending on the event
:
event: message
: LLM returns text chunk event, i.e., the complete text is output in a chunked fashion.task_id
(string): Task ID, used for request tracking and the below Stop Generate API.message_id
(string): Unique message ID.conversation_id
(string): Conversation ID.answer
(string): LLM returned text chunk content.created_at
(int): Creation timestamp, e.g.,1705395332
.
event: agent_message
: LLM returns text chunk event, i.e., with Agent Assistant enabled, the complete text is output in a chunked fashion (Only supported in Agent mode).task_id
(string): Task ID.message_id
(string): Unique message ID.conversation_id
(string): Conversation ID.answer
(string): LLM returned text chunk content.created_at
(int): Creation timestamp.
event: tts_message
: TTS audio stream event. Speech synthesis output. Content is an audio block in Mp3 format, base64 encoded. Decode base64 and feed to player. (Available only when auto-play is enabled).task_id
(string): Task ID.message_id
(string): Unique message ID.audio
(string): Base64 encoded audio content.created_at
(int): Creation timestamp.
event: tts_message_end
: TTS audio stream end event.task_id
(string): Task ID.message_id
(string): Unique message ID.audio
(string): Empty string for this event.created_at
(int): Creation timestamp.
event: agent_thought
: Thought of Agent, contains LLM thought, tool call input/output (Only supported in Agent mode).id
(string): Agent thought ID.task_id
(string): Task ID.message_id
(string): Unique message ID.position
(int): Position of current agent thought.thought
(string): What LLM is thinking.observation
(string): Response from tool calls.tool
(string): List of tools called, separated by;
.tool_input
(string): JSON formatted tool input. E.g.,{"dalle3": {"prompt": "a cute cat"}}
.created_at
(int): Creation timestamp.message_files
(array[string]): File IDs.file_id
(string): File ID.
conversation_id
(string): Conversation ID.
event: message_file
: Message file event, a new file created by a tool.id
(string): File unique ID.type
(string): File type, currently only “image”.belongs_to
(string): Belongs to, will only be ‘assistant’ here.url
(string): Remote URL of the file.conversation_id
(string): Conversation ID.
event: message_end
: Message end event, streaming has ended.task_id
(string): Task ID.message_id
(string): Unique message ID.conversation_id
(string): Conversation ID.metadata
(object): Metadata.usage
(Usage): Model usage information.retriever_resources
(array[RetrieverResource]): Citation and Attribution List.
event: message_replace
: Message content replacement event. If content moderation flags content, it’s replaced via this event.task_id
(string): Task ID.message_id
(string): Unique message ID.conversation_id
(string): Conversation ID.answer
(string): Replacement content.created_at
(int): Creation timestamp.
event: error
: Exceptions during streaming. Reception ends the stream.task_id
(string): Task ID.message_id
(string): Unique message ID.status
(int): HTTP status code.code
(string): Error code.message
(string): Error message.
event: ping
: Ping event every 10 seconds to keep the connection alive.
Errors
- 404, Conversation does not exist.
- 400,
invalid_param
, abnormal parameter input. - 400,
app_unavailable
, App configuration unavailable. - 400,
provider_not_initialize
, no available model credential configuration. - 400,
provider_quota_exceeded
, model invocation quota insufficient. - 400,
model_currently_not_support
, current model unavailable. - 400,
completion_request_error
, text generation failed. - 500, internal server error.
POST /files/upload File Upload
Upload a file (currently only images are supported) for use when sending messages, enabling multimodal understanding of images and text. Supports png, jpg, jpeg, webp, gif formats. Uploaded files are for use by the current end-user only.
Request Body
This interface requires a multipart/form-data
request.
file
(File, Required): The file to be uploaded.user
(string, Required): User identifier, defined by the developer’s rules, must be unique within the application.
Response
After a successful upload, the server will return the file’s ID and related information.
id
(uuid): ID.name
(string): File name.size
(int): File size (bytes).extension
(string): File extension.mime_type
(string): File mime-type.created_by
(uuid): End-user ID.created_at
(timestamp): Creation timestamp, e.g.,1705395332
.
Errors
- 400,
no_file_uploaded
, a file must be provided. - 400,
too_many_files
, currently only one file is accepted. - 400,
unsupported_preview
, the file does not support preview. - 400,
unsupported_estimate
, the file does not support estimation. - 413,
file_too_large
, the file is too large. - 415,
unsupported_file_type
, unsupported extension. - 503,
s3_connection_failed
, unable to connect to S3 service. - 503,
s3_permission_denied
, no permission to upload files to S3. - 503,
s3_file_too_large
, file exceeds S3 size limit. - 500, internal server error.
POST /chat-messages/:task_id/stop Stop Generate
Only supported in streaming mode.
Path Parameters
task_id
(string): Task ID, can be obtained from the streaming chunk return.
Request Body
user
(string, Required): User identifier, used to define the identity of the end-user, must be consistent with the user passed in the send message interface.
Response
result
(string): Always returns “success”.
POST /messages/:message_id/feedbacks Message Feedback
End-users can provide feedback messages, facilitating application developers to optimize expected outputs.
Path Parameters
message_id
(string): Message ID.
Request Body
rating
(string): Upvote aslike
, downvote asdislike
, revoke upvote/downvote asnull
.user
(string): User identifier, defined by the developer’s rules, must be unique within the application.content
(string, optional): The specific content of message feedback.
Response
result
(string): Always returns “success”.
GET /messages/:message_id/suggested Next Suggested Questions
Get next questions suggestions for the current message.
Path Parameters
message_id
(string): Message ID.
Query Parameters
user
(string): User identifier, used to define the identity of the end-user for retrieval and statistics. Should be uniquely defined by the developer within the application.
GET /messages Get Conversation History Messages
Returns historical chat records in a scrolling load format, with the first page returning the latest {limit}
messages, i.e., in reverse order.
Query Parameters
conversation_id
(string): Conversation ID.user
(string): User identifier.first_id
(string, optional): The ID of the first chat record on the current page, default is null.limit
(int, optional, default20
): How many chat history messages to return in one request.
Response
data
(array[object]): Message list.id
(string): Message ID.conversation_id
(string): Conversation ID.inputs
(object): User input parameters.query
(string): User input / question content.message_files
(array[object]): Message files.id
(string): ID.type
(string): File type,image
for images.url
(string): Preview image URL.belongs_to
(string): Belongs to,user
orassistant
.
agent_thoughts
(array[object]): Agent thought (Empty if it’s a Basic Assistant).id
(string): Agent thought ID.message_id
(string): Unique message ID.position
(int): Position of current agent thought.thought
(string): What LLM is thinking.observation
(string): Response from tool calls.tool
(string): List of tools called, separated by;
.tool_input
(string): JSON formatted tool input.created_at
(int): Creation timestamp.message_files
(array[string]): File IDs.file_id
(string): File ID.
answer
(string): Response message content.created_at
(timestamp): Creation timestamp.feedback
(object, optional): Feedback information.rating
(string):like
/dislike
.
retriever_resources
(array[RetrieverResource]): Citation and Attribution List.
has_more
(bool): Whether there is a next page.limit
(int): Number of returned items.
GET /conversations Get Conversations
Retrieve the conversation list for the current user, defaulting to the most recent 20 entries.
Query Parameters
user
(string): User identifier.last_id
(string, optional): The ID of the last record on the current page, default is null.limit
(int, optional, default20
, max100
, min1
): How many records to return.sort_by
(string, optional, default-updated_at
): Sorting Field. Available:created_at
,-created_at
,updated_at
,-updated_at
.-
denotes descending.
Response
data
(array[object]): List of conversations.id
(string): Conversation ID.name
(string): Conversation name.inputs
(object): User input parameters.status
(string): Conversation status.introduction
(string): Introduction.created_at
(timestamp): Creation timestamp.updated_at
(timestamp): Update timestamp.
has_more
(bool): Whether there is a next page.limit
(int): Number of entries returned.
DELETE /conversations/:conversation_id Delete Conversation
Delete a conversation.
Path Parameters
conversation_id
(string): Conversation ID.
Request Body
user
(string): The user identifier.
Response
204 No Content
POST /conversations/:conversation_id/name Conversation Rename
Rename the session. The session name is used for display on clients that support multiple sessions.
Path Parameters
conversation_id
(string): Conversation ID.
Request Body
name
(string, optional): The name of the conversation. Can be omitted ifauto_generate
istrue
.auto_generate
(bool, optional, defaultfalse
): Automatically generate the title.user
(string): The user identifier.
Response
id
(string): Conversation ID.name
(string): Conversation name.inputs
(object): User input parameters.status
(string): Conversation status.introduction
(string): Introduction.created_at
(timestamp): Creation timestamp.updated_at
(timestamp): Update timestamp.
GET /conversations/:conversation_id/variables Get Conversation Variables
Retrieve variables from a specific conversation. Useful for extracting structured data captured during the conversation.
Path Parameters
conversation_id
(string): The ID of the conversation.
Query Parameters
user
(string): The user identifier.last_id
(string, optional): The ID of the last record on the current page, default is null.limit
(int, optional, default20
, max100
, min1
): Number of records to return.variable_name
(string, optional): Filter by a specific variable name.
Response
limit
(int): Number of items per page.has_more
(bool): Whether there is a next page.data
(array[object]): List of variables.id
(string): Variable ID.name
(string): Variable name.value_type
(string): Variable type (e.g., string, number, object).value
(string): Variable value.description
(string): Variable description.created_at
(int): Creation timestamp.updated_at
(int): Last update timestamp.
Errors
- 404,
conversation_not_exists
, Conversation not found.
POST /audio-to-text Speech to Text
This endpoint requires a multipart/form-data
request.
Request Body
file
(file): Audio file. Supported formats:mp3, mp4, mpeg, mpga, m4a, wav, webm
. File size limit: 15MB.user
(string): User identifier.
Response
text
(string): Output text.
POST /text-to-audio Text to Audio
Text to speech.
Request Body
message_id
(string, optional): For text messages generated by Dify, pass themessage_id
. Backend uses it to find content for synthesis. Priority overtext
if both provided.text
(string, optional): Speech content to generate. Required ifmessage_id
is not provided.user
(string): The user identifier.
Response
The response is an audio file stream. Headers:
Content-Type
:audio/wav
(or other audio format depending on system configuration)
GET /parameters Get Application Parameters Information
Used at the start of entering the page to obtain information such as features, input parameter names, types, and default values.
Query Parameters
user
(string): User identifier.
Response
opening_statement
(string): Opening statement.suggested_questions
(array[string]): List of suggested questions for the opening.suggested_questions_after_answer
(object): Suggest questions after enabling the answer.enabled
(bool): Whether it is enabled.
speech_to_text
(object): Speech to text.enabled
(bool): Whether it is enabled.
retriever_resource
(object): Citation and Attribution.enabled
(bool): Whether it is enabled.
annotation_reply
(object): Annotation reply.enabled
(bool): Whether it is enabled.
user_input_form
(array[object]): User input form configuration.text-input
(object): Text input control.label
(string): Variable display label name.variable
(string): Variable ID.required
(bool): Whether it is required.default
(string): Default value.
paragraph
(object): Paragraph text input control.label
(string): Variable display label name.variable
(string): Variable ID.required
(bool): Whether it is required.default
(string): Default value.
select
(object): Dropdown control.label
(string): Variable display label name.variable
(string): Variable ID.required
(bool): Whether it is required.default
(string): Default value.options
(array[string]): Option values.
file_upload
(object): File upload configuration.image
(object): Image settings. Currently supportspng, jpg, jpeg, webp, gif
.enabled
(bool): Whether it is enabled.number_limits
(int): Image number limit (default 3).transfer_methods
(array[string]): List of transfer methods (remote_url
,local_file
).
system_parameters
(object): System parameters.file_size_limit
(int): Document upload size limit (MB).image_file_size_limit
(int): Image file upload size limit (MB).audio_file_size_limit
(int): Audio file upload size limit (MB).video_file_size_limit
(int): Video file upload size limit (MB).
GET /meta Get Application Meta Information
Used to get icons of tools in this application.
Response
tool_icons
(object): Tool icons.tool_name
(string): Key is the tool name.icon
(object|string): Icon can be an object or a URL string.- (object)
background
(string): Background color in hex. - (object)
content
(string): Emoji or icon character. - (string) URL of the icon.
- (object)
GET /apps/annotations Get Annotation List
Query Parameters
page
(int, optional, default1
): Page number.limit
(int, optional, default20
, range1-100
): Number of items returned.
POST /apps/annotations Create Annotation
Request Body
question
(string): Question.answer
(string): Answer.
PUT /apps/annotations/:annotation_id Update Annotation
Path Parameters
annotation_id
(string): Annotation ID.
Request Body
question
(string, optional): Question.answer
(string, optional): Answer.
DELETE /apps/annotations/:annotation_id Delete Annotation
Path Parameters
annotation_id
(string): Annotation ID.
Response
204 No Content
GET /apps/annotation-reply/:action/status/:job_id Query Initial Annotation Reply Settings Task Status
Path Parameters
action
(string): Action,enable
ordisable
. Must match the action in the initial settings call.job_id
(string): Job ID from the initial settings call.