dify-spring-boot-starter
  • Guide
  • Getting-started
  • Install
  • Configure
  • Client Builder
  • Service Status Monitoring
  • Logging Security
  • Features

    • Chat API
    • Workflow API
    • Dataset API
    • Server API
  • Event

    • Instructions
    • Chat event
  • Using configurations
  • Customized Configuration
  • v2.x-SNAPSHOT
  • v1.x
  • v0.x
  • Changelog
  • 简体中文
  • English
GitHub
  • Guide
  • Getting-started
  • Install
  • Configure
  • Client Builder
  • Service Status Monitoring
  • Logging Security
  • Features

    • Chat API
    • Workflow API
    • Dataset API
    • Server API
  • Event

    • Instructions
    • Chat event
  • Using configurations
  • Customized Configuration
  • v2.x-SNAPSHOT
  • v1.x
  • v0.x
  • Changelog
  • 简体中文
  • English
GitHub
  • Guide

    • Guide
    • Getting-started
    • Install
    • Configure
    • Client Builder
    • Service Status Monitoring
    • Logging Security
  • Features

    • Chat API
    • Workflow API
    • Dataset API
    • Server API
  • Event

    • Instructions
    • Chat event

Server API

Interface Overview

The Server API provides comprehensive functionality for interacting with the Dify platform, including managing applications, retrieving and initializing API keys for both applications and datasets. All interfaces require a valid API key for authentication. Use the DifyServer interface instance.

By default, if the current environment contains redis, then use redis to persist the token, if not, then use the default implementation to save the token (it will be lost if the service is restarted).

1. Application Management

1.1 Get All Applications (Non-Paginated)

Method

List<AppsResponseVO> apps(String mode, String name);

Request Parameters

Parameter nameTypeRequiredDescription
modeStringNomode chat\agent-chat\completion\advanced-chat\workflow
nameStringNoApplication name, used to filter the application list (optional)

Response Parameters

AppsResponseVO

Parameter nameTypeDescription
idStringApplication ID
nameStringApplication name
maxActiveRequestsIntegerMaximum active requests
descriptionStringApplication description
modeStringApplication mode
iconTypeStringIcon type
iconStringIcon
iconBackgroundStringIcon background
iconUrlStringIcon URL
modelConfigModelConfigModel configuration
workflowObjectWorkflow information
useIconAsAnswerIconBooleanWhether to use icon as answer icon
createdByStringCreator ID
createdAtLongCreation time (timestamp)
updatedByStringUpdater ID
updatedAtLongUpdate time (timestamp)
tagsList<String>Application tags

ModelConfig

Parameter nameTypeDescription
modelModelModel information
prePromptStringPre-prompt text
createdByStringCreator ID
createdAtLongCreation time (timestamp)
updatedByStringUpdater ID
updatedAtLongUpdate time (timestamp)

Model

Parameter nameTypeDescription
providerStringModel provider
nameStringModel name
modeStringModel mode
completionParamsCompletionParamsCompletion parameters

CompletionParams

Parameter nameTypeDescription
stopList<String>Stop sequences

Request Example


@Resource
private DifyServer difyServer;

@Test
public void testGetApps() {
    // Get all applications
    List<AppsResponseVO> apps = difyServer.apps("");

    // Get applications with name filter
    List<AppsResponseVO> filteredApps = difyServer.apps("myApp");
}

1.2 Get Applications with Pagination

Method

AppsResponseResult apps(AppsRequest appsRequest);

Request Parameters

AppsRequest

Parameter nameTypeRequiredDescription
pageIntegerNoPage number (default: 1)
limitIntegerNoNumber of items per page (default: 20, range: 1-100)
modeStringNoApplication mode filter: chat\agent-chat\completion\advanced-chat\workflow
nameStringNoApplication name filter
isCreatedByMeBooleanNoWhether the application is created by the current user

Response Parameters

AppsResponseResult

Parameter nameTypeDescription
dataList<AppsResponse>Current page data list
hasMoreBooleanWhether there are more pages
limitIntegerItems per page
pageIntegerCurrent page number
totalIntegerTotal number of items

The structure of AppsResponse is the same as defined above in section 1.1.

Request Example


@Resource
private DifyServer difyServer;

@Test
public void testGetAppsPaginated() {
    // Create paginated request
    AppsRequest request = new AppsRequest();
    request.setPage(1);
    request.setLimit(10);
    request.setMode("chat");
    request.setName("myApp");
    request.setIsCreatedByMe(true);

    // Get paginated applications
    AppsResponseResult result = difyServer.apps(request);
    
    System.out.println("Current page: " + result.getPage());
    System.out.println("Items per page: " + result.getLimit());
    System.out.println("Total items: " + result.getTotal());
    System.out.println("Has more: " + result.getHasMore());
    System.out.println("Data size: " + result.getData().size());
}

1.3 Get Application by ID

Method

AppsResponseVO app(String appId);

Request Parameters

Parameter nameTypeRequiredDescription
appIdStringYesApplication ID

Response Parameters

Same as the AppsResponseVO structure defined above.

Request Example


@Resource
private DifyServer difyServer;

@Test
public void testGetApp() {
    AppsResponseVO app = difyServer.app("app-123456789");
}

1.4 Create Application

Available since 2.3.0

Method

AppsResponse createApp(AppCreateRequest request);

Request Parameters

AppCreateRequest

ParameterTypeRequiredDescription
nameStringYesApplication name
modeStringYesApplication mode: chat, agent-chat, advanced-chat, workflow, completion
descriptionStringNoApplication description
iconTypeStringNoIcon type
iconStringNoIcon content
iconBackgroundStringNoIcon background color

Response Parameters

Same as the AppsResponse defined in section 1.1.

Request Example


@Resource
private DifyServer difyServer;

@Test
public void testCreateApp() {
    AppCreateRequest request = new AppCreateRequest();
    request.setName("My Agent");
    request.setMode("agent-chat");
    request.setDescription("Agent application sample");

    AppsResponse app = difyServer.createApp(request);
}

1.5 Update Application

Available since 2.3.0

Method

AppsResponse updateApp(String appId, AppUpdateRequest request);

Request Parameters

ParameterTypeRequiredDescription
appIdStringYesApplication ID
requestAppUpdateRequestYesFields to update

AppUpdateRequest

ParameterTypeRequiredDescription
nameStringYesApplication name
descriptionStringNoApplication description
iconTypeStringNoIcon type
iconStringNoIcon content
iconBackgroundStringNoIcon background color
useIconAsAnswerIconBooleanNoWhether to use the icon as the answer icon
maxActiveRequestsIntegerNoMaximum active requests (0 means unlimited)

Response Parameters

Same as the AppsResponse defined in section 1.1.

Request Example


@Resource
private DifyServer difyServer;

@Test
public void testUpdateApp() {
    AppUpdateRequest request = new AppUpdateRequest();
    request.setName("Renamed App");
    request.setDescription("Updated description");

    AppsResponse app = difyServer.updateApp("app-123456789", request);
}

1.6 Delete Application

Available since 2.3.0

Method

void deleteApp(String appId);

Request Parameters

ParameterTypeRequiredDescription
appIdStringYesApplication ID

Response Parameters

No return value. Returns 204 No Content on success.

Request Example


@Resource
private DifyServer difyServer;

@Test
public void testDeleteApp() {
    difyServer.deleteApp("app-123456789");
}

1.7 Get Application API Keys

Method

List<ApiKeyResponseVO> getAppApiKey(String id);

Request Parameters

Parameter nameTypeRequiredDescription
idStringYesApplication ID

Response Parameters

ApiKeyResponseVO

Parameter nameTypeDescription
idStringAPI Key ID
tokenStringAPI Key token value

Request Example


@Resource
private DifyServer difyServer;

@Test
public void testGetAppApiKeys() {
    List<ApiKeyResponseVO> apiKeys = difyServer.getAppApiKey("app-123456789");
}

1.8 Initialize Application API Key

Method

List<ApiKeyResponseVO> initAppApiKey(String id);

Request Parameters

Parameter nameTypeRequiredDescription
idStringYesApplication ID

Response Parameters

Same as the ApiKeyResponseVO structure defined above.

Request Example


@Resource
private DifyServer difyServer;

@Test
public void testInitAppApiKey() {
    List<ApiKeyResponseVO> apiKeys = difyServer.initAppApiKey("app-123456789");
}

1.9 Delete Application API Key

Method

void deleteAppApiKey(String appId, String apiKeyId);

Request Parameters

Parameter nameTypeRequiredDescription
appIdStringYesApplication ID
apiKeyIdStringYesAPI Key ID

Response Parameters

This method does not return a value. It returns 204 No Content on success.

Request Example


@Resource
private DifyServer difyServer;

@Test
public void testDeleteAppApiKey() {
    // Delete API key for specified application
    difyServer.deleteAppApiKey("app-123456789", "key-789012345");
}

1.10 Publish Workflow

Method

void workflowsPublish(String appId);

Request Parameters

Parameter nameTypeRequiredDescription
appIdStringYesApplication ID

Response Parameters

This method does not return a value.

Request Example


@Resource
private DifyServer difyServer;

@Test
public void testWorkflowsPublish() {
    // Publish the specified workflow application
    difyServer.workflowsPublish("app-123456789");
}

1.11 Publish Application Model Configuration

Available since 2.3.0

Corresponds to the console "Publish update" action for chat / agent-chat / completion mode apps (prompt, model, tools, file upload, etc.). For advanced-chat / workflow apps, use 1.10 Publish Workflow instead.

Method

void updateAppModelConfig(String appId, AppModelConfigRequest request);

Request Parameters

ParameterTypeRequiredDescription
appIdStringYesApplication ID
requestAppModelConfigRequestYesModel configuration payload

AppModelConfigRequest

ParameterTypeRequiredDescription
prePromptStringNoPre-prompt text (used when prompt_type=simple)
promptTypeStringNoPrompt type, simple or advanced
chatPromptConfigMap<String, Object>NoAdvanced chat prompt configuration
completionPromptConfigMap<String, Object>NoAdvanced completion prompt configuration
userInputFormList<Map<String, Object>>NoUser input form definition
datasetQueryVariableStringNoVariable used for dataset queries
moreLikeThisEnabledConfigNo"More like this" feature
openingStatementStringNoConversation opening greeting
suggestedQuestionsList<String>NoSuggested questions shown with the opening statement
sensitiveWordAvoidanceSensitiveWordAvoidanceNoSensitive word moderation configuration
speechToTextEnabledConfigNoSpeech-to-text configuration
textToSpeechTextToSpeechNoText-to-speech configuration
fileUploadFileUploadNoFile upload configuration
suggestedQuestionsAfterAnswerEnabledConfigNoSuggested follow-up questions after each answer
retrieverResourceEnabledConfigNoWhether to expose retrieval sources (citations)
agentModeAgentModeNoAgent mode configuration (strategy, tools, max iterations, ...)
modelModelNoModel configuration (provider, name, mode, completion_params)
datasetConfigsDatasetConfigsNoDataset retrieval configuration

AgentMode

ParameterTypeRequiredDescription
enabledBooleanNoWhether agent mode is enabled
strategyStringNoStrategy, e.g. function_call, react
maxIterationIntegerNoMaximum iteration count
toolsList<AgentTool>NoEnabled tools
promptStringNoCustom agent prompt

AgentTool

ParameterTypeRequiredDescription
providerIdStringNoTool provider ID
providerTypeStringNoProvider type, e.g. builtin
providerNameStringNoProvider name
toolNameStringNoTool name
toolLabelStringNoTool display label
toolParametersMap<String, Object>NoTool parameters
enabledBooleanNoWhether the tool is enabled
isDeletedBooleanNoWhether the tool is deleted
notAuthorBooleanNoWhether caller is not the author

Model

ParameterTypeRequiredDescription
providerStringNoModel provider, e.g. langgenius/ollama/ollama
nameStringNoModel name
modeStringNoModel mode, e.g. chat, completion
completionParamsMap<String, Object>NoCompletion parameters such as stop, temperature

Response Parameters

This method does not return a value.

Request Example


@Resource
private DifyServer difyServer;

@Test
public void testUpdateAppModelConfig() {
    AppModelConfigRequest request = new AppModelConfigRequest();
    request.setPrePrompt("hi2");
    request.setPromptType("simple");
    request.setOpeningStatement("Hi! How can I help you?");
    request.setSuggestedQuestions(List.of("hi", "hello"));

    AppModelConfigRequest.Model model = new AppModelConfigRequest.Model();
    model.setProvider("langgenius/ollama/ollama");
    model.setName("qwen2.5:latest");
    model.setMode("chat");
    model.setCompletionParams(Map.of("stop", List.of()));
    request.setModel(model);

    AppModelConfigRequest.AgentMode agentMode = new AppModelConfigRequest.AgentMode();
    agentMode.setEnabled(true);
    agentMode.setMaxIteration(5);
    agentMode.setStrategy("function_call");
    request.setAgentMode(agentMode);

    difyServer.updateAppModelConfig("app-123456789", request);
}

2. Knowledge Base Management

2.1 Get Knowledge Base API Keys

Method

List<DatasetApiKeyResponseVO> getDatasetApiKey();

Response Parameters

DatasetApiKeyResponseVO

Parameter nameTypeDescription
idStringAPI Key ID
typeStringAPI Key type
tokenStringAPI Key token value
lastUsedAtLongLast used time (timestamp)
createdAtLongCreation time (timestamp)

Request Example


@Resource
private DifyServer difyServer;

@Test
public void testGetDatasetApiKeys() {
    List<DatasetApiKeyResponseVO> datasetApiKeys = difyServer.getDatasetApiKey();
}

2.2 Initialize Knowledge Base API Key

Method

List<DatasetApiKeyResponseVO> initDatasetApiKey();

Response Parameters

Same as the DatasetApiKeyResponseVO structure defined above.

Request Example


@Resource
private DifyServer difyServer;

@Test
public void testInitDatasetApiKey() {
    List<DatasetApiKeyResponseVO> datasetApiKeys = difyServer.initDatasetApiKey();
}

2.3 Delete Knowledge Base API Key

Method

void deleteDatasetApiKey(String apiKeyId);

Request Parameters

Parameter nameTypeRequiredDescription
apiKeyIdStringYesAPI Key ID

Response Parameters

This method does not return a value. It returns 204 No Content on success.

Request Example


@Resource
private DifyServer difyServer;

@Test
public void testDeleteDatasetApiKey() {
    // Delete specified knowledge base API key
    difyServer.deleteDatasetApiKey("89f04b59-6906-4d32-a630-d2911d3b5fd8");
}

2.4 Get Dataset Indexing Status

Method

DocumentIndexingStatusResponse getDatasetIndexingStatus(String datasetId);

Request Parameters

Parameter nameTypeRequiredDescription
datasetIdStringYesDataset ID

Response Parameters

DocumentIndexingStatusResponse

Parameter nameTypeDescription
dataList<ProcessingStatus>Document indexing status list

ProcessingStatus

Parameter nameTypeDescription
idStringDocument ID
indexingStatusStringIndexing status: waiting, parsing, cleaning, splitting, indexing, completed, error, paused
processingStartedAtLongProcessing start time (timestamp)
parsingCompletedAtLongParsing completion time (timestamp)
cleaningCompletedAtLongCleaning completion time (timestamp)
splittingCompletedAtLongSplitting completion time (timestamp)
completedAtLongCompletion time (timestamp)
pausedAtLongPause time (timestamp)
errorStringError message
stoppedAtLongStop time (timestamp)
completedSegmentsIntegerNumber of completed segments
totalSegmentsIntegerTotal number of segments

Request Example


@Resource
private DifyServer difyServer;

@Test
public void testGetDatasetIndexingStatus() {
    String datasetId = "dataset-123456789";

    // Get dataset indexing status
    DocumentIndexingStatusResponse indexingStatus = difyServer.getDatasetIndexingStatus(datasetId);

    if (indexingStatus.getData() != null && !indexingStatus.getData().isEmpty()) {
        for (DocumentIndexingStatusResponse.ProcessingStatus doc : indexingStatus.getData()) {
            System.out.println("Document ID: " + doc.getId());
            System.out.println("Indexing Status: " + doc.getIndexingStatus());
            System.out.println("Completed Segments: " + doc.getCompletedSegments() + "/" + doc.getTotalSegments());
        }
    }
}

2.5 Get Document Indexing Status

Method

DocumentIndexingStatusResponse.ProcessingStatus getDocumentIndexingStatus(String datasetId, String documentId);

Request Parameters

Parameter nameTypeRequiredDescription
datasetIdStringYesDataset ID
documentIdStringYesDocument ID

Response Parameters

ProcessingStatus (same structure as defined in section 2.4)

Request Example


@Resource
private DifyServer difyServer;

@Test
public void testGetDocumentIndexingStatus() {
    String datasetId = "dataset-123456789";
    String documentId = "doc-987654321";

    // Get document indexing status
    DocumentIndexingStatusResponse.ProcessingStatus documentStatus =
        difyServer.getDocumentIndexingStatus(datasetId, documentId);

    System.out.println("Document ID: " + documentStatus.getId());
    System.out.println("Indexing Status: " + documentStatus.getIndexingStatus());
    System.out.println("Completed Segments: " + documentStatus.getCompletedSegments() + "/" + documentStatus.getTotalSegments());

    if (documentStatus.getError() != null) {
        System.out.println("Error Message: " + documentStatus.getError());
    }
}

2.6 Get Dataset Error Documents

Method

DatasetErrorDocumentsResponse getDatasetErrorDocuments(String datasetId);

Request Parameters

Parameter nameTypeRequiredDescription
datasetIdStringYesDataset ID

Response Parameters

DatasetErrorDocumentsResponse

Parameter nameTypeDescription
dataList<ErrorDocument>Error document list
totalIntegerTotal number of errors

ErrorDocument

Parameter nameTypeDescription
idStringDocument ID
nameStringDocument name
errorStringError message
indexingStatusStringIndexing status (usually "error")
createdAtLongCreation time (timestamp)
updatedAtLongUpdate time (timestamp)

Request Example


@Resource
private DifyServer difyServer;

@Test
public void testGetDatasetErrorDocuments() {
    String datasetId = "dataset-123456789";

    // Get dataset error documents
    DatasetErrorDocumentsResponse errorDocuments = difyServer.getDatasetErrorDocuments(datasetId);

    System.out.println("Total Error Documents: " + errorDocuments.getTotal());

    if (errorDocuments.getData() != null && !errorDocuments.getData().isEmpty()) {
        for (DatasetErrorDocumentsResponse.ErrorDocument doc : errorDocuments.getData()) {
            System.out.println("Document ID: " + doc.getId());
            System.out.println("Document Name: " + doc.getName());
            System.out.println("Error Message: " + doc.getError());
        }
    } else {
        System.out.println("No error documents found");
    }
}

2.7 Retry Document Indexing

Method

void retryDocumentIndexing(DocumentRetryRequest request);

Request Parameters

DocumentRetryRequest

Parameter nameTypeRequiredDescription
datasetIdStringYesDataset ID
documentIdsList<String>YesList of document IDs to retry

Response Parameters

This method does not return a value. It returns 204 No Content on success.

Request Example


@Resource
private DifyServer difyServer;

@Test
public void testRetryDocumentIndexing() {
    String datasetId = "dataset-123456789";

    // First, get error documents
    DatasetErrorDocumentsResponse errorDocuments = difyServer.getDatasetErrorDocuments(datasetId);

    if (errorDocuments.getData() != null && !errorDocuments.getData().isEmpty()) {
        // Extract error document IDs
        List<String> errorDocIds = errorDocuments.getData().stream()
            .map(DatasetErrorDocumentsResponse.ErrorDocument::getId)
            .collect(Collectors.toList());

        // Create retry request
        DocumentRetryRequest request = new DocumentRetryRequest();
        request.setDatasetId(datasetId);
        request.setDocumentIds(errorDocIds);

        // Retry document indexing
        difyServer.retryDocumentIndexing(request);
        System.out.println("Triggered indexing retry for " + errorDocIds.size() + " documents");
    } else {
        System.out.println("No error documents to retry");
    }
}

3. Chat Conversation Management

3.1 Get Application Chat Conversation List

Method

DifyPageResult<ChatConversationResponse> chatConversations(ChatConversationsRequest request);

Request Parameters

ChatConversationsRequest

Parameter nameTypeRequiredDescription
appIdStringYesApplication ID
pageIntegerNoPage number (default: 1)
limitIntegerNoNumber of items per page (default: 10, range: 1-100)
startStringNoStart time, format: yyyy-MM-dd HH:mm
endStringNoEnd time, format: yyyy-MM-dd HH:mm
sortByStringNoSort field, e.g., -created_at (sort by creation time descending)
annotationStatusStringNoAnnotation status: all, not_annotated, annotated

Response Parameters

DifyPageResult<ChatConversationResponse>

Parameter nameTypeDescription
dataList<ChatConversationResponse>Current page data list
hasMoreBooleanWhether there are more pages
limitIntegerItems per page
pageIntegerCurrent page number
totalIntegerTotal number of items

ChatConversationResponse

Parameter nameTypeDescription
idStringConversation ID
statusStringConversation status
fromSourceStringSource
fromEndUserIdStringEnd user ID
fromEndUserSessionIdStringEnd user session ID
fromAccountIdStringAccount ID
fromAccountNameStringAccount name
nameStringConversation name
summaryStringConversation summary
readAtLongRead time (timestamp)
createdAtLongCreation time (timestamp)
updatedAtLongUpdate time (timestamp)
annotatedBooleanWhether annotated
modelConfigMap<String, Object>Model configuration
messageCountIntegerMessage count
userFeedbackStatsFeedbackStatsUser feedback statistics
adminFeedbackStatsFeedbackStatsAdmin feedback statistics
statusCountStatusCountStatus count

FeedbackStats

Parameter nameTypeDescription
likeIntegerLike count
dislikeIntegerDislike count

StatusCount

Parameter nameTypeDescription
successIntegerSuccess count
failedIntegerFailed count
partialSuccessIntegerPartial success count

Request Example


@Resource
private DifyServer difyServer;

@Test
public void testGetChatConversations() {
    // Create request object
    ChatConversationsRequest request = new ChatConversationsRequest();
    request.setAppId("app-123456789");
    request.setPage(1);
    request.setLimit(10);
    request.setStart("2025-10-23 00:00");
    request.setEnd("2025-10-30 23:59");
    request.setAnnotationStatus("all");
    request.setSortBy("-created_at");

    // Get chat conversation list
    DifyPageResult<ChatConversationResponse> result = difyServer.chatConversations(request);
    
    System.out.println("Current page: " + result.getPage());
    System.out.println("Items per page: " + result.getLimit());
    System.out.println("Total items: " + result.getTotal());
    System.out.println("Has more: " + result.getHasMore());
    System.out.println("Data size: " + result.getData().size());
    
    for (ChatConversationResponse conversation : result.getData()) {
        System.out.println("Conversation ID: " + conversation.getId());
        System.out.println("Conversation name: " + conversation.getName());
        System.out.println("Is annotated: " + conversation.isAnnotated());
    }
}

4. Application Statistics

4.1 Get Application Daily Conversation Statistics(except workflow)

Method

List<DailyConversationsResponse> dailyConversations(String appId, LocalDateTime start, LocalDateTime end);

Request Parameters

Parameter nameTypeRequiredDescription
appIdStringYesApplication ID
startLocalDateTimeYesStart time, format: yyyy-MM-dd HH:mm
endLocalDateTimeYesEnd time, format: yyyy-MM-dd HH:mm

Response Parameters

DailyConversationsResponse

Parameter nameTypeDescription
dateStringDate, format: yyyy-MM-dd
conversationCountIntegerNumber of conversations on that day

Request Example


@Resource
private DifyServer difyServer;

@Test
public void testGetDailyConversations() {
    String appId = "08534c1a-4316-4cd3-806d-bbbca03f58aa";
    LocalDateTime start = LocalDateTime.of(2025, 10, 23, 0, 0);
    LocalDateTime end = LocalDateTime.of(2025, 10, 30, 23, 59);

    // Get daily conversation statistics
    List<DailyConversationsResponse> dailyStats = difyServer.dailyConversations(appId, start, end);

    if (dailyStats != null) {
        for (DailyConversationsResponse dailyStat : dailyStats) {
            System.out.println("Date: " + dailyStat.getDate());
            System.out.println("Conversation count: " + dailyStat.getConversationCount());
        }
    }
}

4.2 Get Application Daily Workflow Conversation Statistics

Method

List<DailyWorkflowConversationsResponse> dailyWorkflowConversations(String appId, LocalDateTime start, LocalDateTime end);

Request Parameters

Parameter nameTypeRequiredDescription
appIdStringYesApplication ID
startLocalDateTimeYesStart time, format: yyyy-MM-dd HH:mm
endLocalDateTimeYesEnd time, format: yyyy-MM-dd HH:mm

Response Parameters

DailyWorkflowConversationsResponse

Parameter nameTypeDescription
dateStringDate, format: yyyy-MM-dd
runsIntegerNumber of workflow runs on that day

Request Example


@Resource
private DifyServer difyServer;

@Test
public void testGetDailyWorkflowConversations() {
    String appId = "08534c1a-4316-4cd3-806d-bbbca03f58aa";
    LocalDateTime start = LocalDateTime.of(2025, 10, 23, 0, 0);
    LocalDateTime end = LocalDateTime.of(2025, 10, 30, 23, 59);

    // Get daily workflow conversation statistics
    List<DailyWorkflowConversationsResponse> dailyWorkflowStats = difyServer.dailyWorkflowConversations(appId, start, end);

    if (dailyWorkflowStats != null) {
        for (DailyWorkflowConversationsResponse dailyStat : dailyWorkflowStats) {
            System.out.println("Date: " + dailyStat.getDate());
            System.out.println("Workflow runs: " + dailyStat.getRuns());
        }
    }
}

4.3 Get Application Daily End Users Statistics

Method

List<DailyEndUsersResponse> dailyEndUsers(String appId, LocalDateTime start, LocalDateTime end);

Request Parameters

Parameter nameTypeRequiredDescription
appIdStringYesApplication ID
startLocalDateTimeYesStart time, format: yyyy-MM-dd HH:mm
endLocalDateTimeYesEnd time, format: yyyy-MM-dd HH:mm

Response Parameters

DailyEndUsersResponse

Parameter nameTypeDescription
dateStringDate, format: yyyy-MM-dd
terminalCountIntegerNumber of end users on that day

Request Example


@Resource
private DifyServer difyServer;

@Test
public void testGetDailyEndUsers() {
    String appId = "08534c1a-4316-4cd3-806d-bbbca03f58aa";
    LocalDateTime start = LocalDateTime.of(2025, 10, 23, 0, 0);
    LocalDateTime end = LocalDateTime.of(2025, 10, 30, 23, 59);

    // Get daily end users statistics
    List<DailyEndUsersResponse> dailyEndUsersStats = difyServer.dailyEndUsers(appId, start, end);

    if (dailyEndUsersStats != null) {
        for (DailyEndUsersResponse dailyStat : dailyEndUsersStats) {
            System.out.println("Date: " + dailyStat.getDate());
            System.out.println("End users count: " + dailyStat.getTerminalCount());
        }
    }
}

4.4 Get Application Average Session Interactions Statistics

Method

List<AverageSessionInteractionsResponse> averageSessionInteractions(String appId, LocalDateTime start, LocalDateTime end);

Request Parameters

Parameter nameTypeRequiredDescription
appIdStringYesApplication ID
startLocalDateTimeYesStart time, format: yyyy-MM-dd HH:mm
endLocalDateTimeYesEnd time, format: yyyy-MM-dd HH:mm

Response Parameters

AverageSessionInteractionsResponse

Parameter nameTypeDescription
dateStringDate, format: yyyy-MM-dd
interactionsDoubleAverage number of interactions per session on that day

Request Example


@Resource
private DifyServer difyServer;

@Test
public void testGetAverageSessionInteractions() {
    String appId = "08534c1a-4316-4cd3-806d-bbbca03f58aa";
    LocalDateTime start = LocalDateTime.of(2025, 10, 23, 0, 0);
    LocalDateTime end = LocalDateTime.of(2025, 10, 30, 23, 59);

    // Get average session interactions statistics
    List<AverageSessionInteractionsResponse> averageSessionInteractionsStats = difyServer.averageSessionInteractions(appId, start, end);

    if (averageSessionInteractionsStats != null) {
        for (AverageSessionInteractionsResponse dailyStat : averageSessionInteractionsStats) {
            System.out.println("Date: " + dailyStat.getDate());
            System.out.println("Average interactions per session: " + dailyStat.getInteractions());
        }
    }
}

4.5 Get Application Tokens Per Second Statistics

Method

List<TokensPerSecondResponse> tokensPerSecond(String appId, LocalDateTime start, LocalDateTime end);

Request Parameters

Parameter nameTypeRequiredDescription
appIdStringYesApplication ID
startLocalDateTimeYesStart time, format: yyyy-MM-dd HH:mm
endLocalDateTimeYesEnd time, format: yyyy-MM-dd HH:mm

Response Parameters

TokensPerSecondResponse

Parameter nameTypeDescription
dateStringDate, format: yyyy-MM-dd
tpsDoubleTokens per second on that day

Request Example


@Resource
private DifyServer difyServer;

@Test
public void testGetTokensPerSecond() {
    String appId = "08534c1a-4316-4cd3-806d-bbbca03f58aa";
    LocalDateTime start = LocalDateTime.of(2025, 10, 23, 0, 0);
    LocalDateTime end = LocalDateTime.of(2025, 10, 30, 23, 59);

    // Get tokens per second statistics
    List<TokensPerSecondResponse> tokensPerSecondStats = difyServer.tokensPerSecond(appId, start, end);

    if (tokensPerSecondStats != null) {
        for (TokensPerSecondResponse dailyStat : tokensPerSecondStats) {
            System.out.println("Date: " + dailyStat.getDate());
            System.out.println("Tokens per second: " + dailyStat.getTps());
        }
    }
}

4.6 Get Application User Satisfaction Rate Statistics

Method

List<UserSatisfactionRateResponse> userSatisfactionRate(String appId, LocalDateTime start, LocalDateTime end);

Request Parameters

Parameter nameTypeRequiredDescription
appIdStringYesApplication ID
startLocalDateTimeYesStart time, format: yyyy-MM-dd HH:mm
endLocalDateTimeYesEnd time, format: yyyy-MM-dd HH:mm

Response Parameters

UserSatisfactionRateResponse

Parameter nameTypeDescription
dateStringDate, format: yyyy-MM-dd
rateDoubleUser satisfaction rate on that day

Request Example


@Resource
private DifyServer difyServer;

@Test
public void testGetUserSatisfactionRate() {
    String appId = "08534c1a-4316-4cd3-806d-bbbca03f58aa";
    LocalDateTime start = LocalDateTime.of(2025, 10, 23, 0, 0);
    LocalDateTime end = LocalDateTime.of(2025, 10, 30, 23, 59);

    // Get user satisfaction rate statistics
    List<UserSatisfactionRateResponse> userSatisfactionRateStats = difyServer.userSatisfactionRate(appId, start, end);

    if (userSatisfactionRateStats != null) {
        for (UserSatisfactionRateResponse dailyStat : userSatisfactionRateStats) {
            System.out.println("Date: " + dailyStat.getDate());
            System.out.println("User satisfaction rate: " + dailyStat.getRate());
        }
    }
}

4.7 Get Application Token Costs Statistics

Method

List<TokenCostsResponse> tokenCosts(String appId, LocalDateTime start, LocalDateTime end);

Request Parameters

Parameter nameTypeRequiredDescription
appIdStringYesApplication ID
startLocalDateTimeYesStart time, format: yyyy-MM-dd HH:mm
endLocalDateTimeYesEnd time, format: yyyy-MM-dd HH:mm

Response Parameters

TokenCostsResponse

Parameter nameTypeDescription
dateStringDate, format: yyyy-MM-dd
token_countIntegerNumber of tokens on that day
total_priceStringTotal price for that day
currencyStringCurrency type

Request Example


@Resource
private DifyServer difyServer;

@Test
public void testGetTokenCosts() {
    String appId = "08534c1a-4316-4cd3-806d-bbbca03f58aa";
    LocalDateTime start = LocalDateTime.of(2025, 10, 23, 0, 0);
    LocalDateTime end = LocalDateTime.of(2025, 10, 30, 23, 59);

    // Get token costs statistics
    List<TokenCostsResponse> tokenCostsStats = difyServer.tokenCosts(appId, start, end);

    if (tokenCostsStats != null) {
        for (TokenCostsResponse dailyStat : tokenCostsStats) {
            System.out.println("Date: " + dailyStat.getDate());
            System.out.println("Token count: " + dailyStat.getTokenCount());
            System.out.println("Total price: " + dailyStat.getTotalPrice());
            System.out.println("Currency: " + dailyStat.getCurrency());
        }
    }
}

4.8 Get Application Daily Messages Statistics

Method

List<DailyMessagesResponse> dailyMessages(String appId, LocalDateTime start, LocalDateTime end);

Request Parameters

Parameter nameTypeRequiredDescription
appIdStringYesApplication ID
startLocalDateTimeYesStart time, format: yyyy-MM-dd HH:mm
endLocalDateTimeYesEnd time, format: yyyy-MM-dd HH:mm

Response Parameters

DailyMessagesResponse

Parameter nameTypeDescription
dateStringDate, format: yyyy-MM-dd
message_countIntegerNumber of messages on that day

Request Example


@Resource
private DifyServer difyServer;

@Test
public void testGetDailyMessages() {
    String appId = "08534c1a-4316-4cd3-806d-bbbca03f58aa";
    LocalDateTime start = LocalDateTime.of(2025, 10, 23, 0, 0);
    LocalDateTime end = LocalDateTime.of(2025, 10, 30, 23, 59);

    // Get daily messages statistics
    List<DailyMessagesResponse> dailyMessagesStats = difyServer.dailyMessages(appId, start, end);

    if (dailyMessagesStats != null) {
        for (DailyMessagesResponse dailyStat : dailyMessagesStats) {
            System.out.println("Date: " + dailyStat.getDate());
            System.out.println("Message count: " + dailyStat.getMessageCount());
        }
    }
}

5. Member Management

5.1 Invite New Members (Create Users)

Available since 2.3.0

Dify automatically creates an account for each invited email and returns an activation URL; forward the URL to the invitee to complete registration.

Method

MemberInviteResponse inviteMembers(MemberInviteRequest request);

Request Parameters

MemberInviteRequest

ParameterTypeRequiredDescription
emailsList<String>YesEmail addresses to invite
roleStringYesMember role. One of: admin, editor, normal, dataset_operator
languageStringNoDefault language for the invitation email/account, e.g. zh-Hans, en-US

Response Parameters

MemberInviteResponse

ParameterTypeDescription
resultStringOverall result, usually success
invitationResultsList<InvitationResult>Per-email invitation result

InvitationResult

ParameterTypeDescription
statusStringsuccess or failed
emailStringInvited email
urlStringActivation URL (present when status is success)
messageStringFailure message (present when status is failed)

Request Example


@Resource
private DifyServer difyServer;

@Test
public void testInviteMembers() {
    MemberInviteRequest request = new MemberInviteRequest();
    request.setEmails(List.of("alice@example.com", "bob@example.com"));
    request.setRole("normal");
    request.setLanguage("en-US");

    MemberInviteResponse response = difyServer.inviteMembers(request);

    for (MemberInviteResponse.InvitationResult item : response.getInvitationResults()) {
        System.out.println(item.getEmail() + " -> " + item.getStatus());
        if ("success".equals(item.getStatus())) {
            System.out.println("Activation URL: " + item.getUrl());
        }
    }
}
Edit this page on GitHub
Last Updated: 4/23/26, 2:34 AM
Prev
Dataset API