Endpoint
In this article, we will use the Quick Start: Rainbow Cat project as an example to illustrate the structure of Endpoint within the plugin. For the complete plugin code, please refer to the Github repository.
Group Definition
An Endpoint
group is a collection of multiple Endpoints
. When creating a new Endpoint
in a Dify
plugin, you may need to fill in the following configurations.

Besides the Endpoint Name
, you can add new form items by writing group configuration information. After saving, you'll see multiple interfaces that will use the same configuration information.

Structure
settings
(map[string] ProviderConfig): Endpoint configuration definitionsendpoints
(list[string], required): Points to specificendpoint
interface definitions
settings:
api_key:
type: secret-input
required: true
label:
en_US: API key
zh_Hans: API key
ja_Jp: API key
pt_BR: API key
placeholder:
en_US: Please input your API key
zh_Hans: 请输入你的 API key
ja_Jp: あなたの API key を入れてください
pt_BR: Por favor, insira sua chave API
endpoints:
- endpoints/duck.yaml
- endpoints/neko.yaml
Interface Definition
path
(string): Follows werkzeug interface standardmethod
(string): Interface method, only supports HEAD GET POST PUT DELETE OPTIONSextra
(object): Configuration information beyond basic infopython
(object)source
(string): Source code implementing this interface
path: "/duck/<app_id>"
method: "GET"
extra:
python:
source: "endpoints/duck.py"
Endpoint Implementation
Must implement a subclass inheriting from dify_plugin.Endpoint
and implement the _invoke
method.
Input Parameters
r
(Request): Request object from werkzeugvalues
(Mapping): Path parameters parsed from the pathsettings
(Mapping): Configuration information for this Endpoint
Return
Response object from werkzeug, supports streaming return
Does not support direct string return
Example Code:
import json
from typing import Mapping
from werkzeug import Request, Response
from dify_plugin import Endpoint
class Duck(Endpoint):
def _invoke(self, r: Request, values: Mapping, settings: Mapping) -> Response:
"""
Invokes the endpoint with the given request.
"""
app_id = values["app_id"]
def generator():
yield f"{app_id} <br>"
return Response(generator(), status=200, content_type="text/html")
Last updated