dify-spring-boot-starter
  • Guide
  • Getting-started
  • Install
  • Configure
  • Client Builder
  • Features

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

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

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

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

    • Guide
    • Getting-started
    • Install
    • Configure
    • Client Builder
  • 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 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.5 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.6 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");
}

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");
}

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

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 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.3 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.4 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.5 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.6 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.7 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());
        }
    }
}
Edit this page on GitHub
Last Updated: 11/3/25, 7:12 AM
Prev
Dataset API