Implementation:Langgenius Dify UseAppStatistics
| Knowledge Sources | |
|---|---|
| Domains | Observability REST API Data Visualization |
| Last Updated | 2026-02-08 00:00 GMT |
Overview
Concrete tool for retrieving application usage statistics and operational metrics provided by the Dify platform.
Description
The Dify frontend exposes a suite of service functions for fetching aggregated application statistics. Each function queries a specific statistical dimension and returns time-series data suitable for dashboard visualization.
Available statistics functions:
1. getAppDailyMessages -- Retrieves daily message counts for a given date range. Messages include both user inputs and assistant responses.
2. getAppDailyConversations -- Retrieves daily conversation session counts. Each conversation represents one complete interaction session.
3. getAppStatistics -- Retrieves general application statistics including overall counts and averages.
4. getAppDailyEndUsers -- Retrieves daily unique end-user counts, tracking how many distinct users interacted with the application each day.
5. getAppTokenCosts -- Retrieves daily token consumption data, broken down by input and output tokens, enabling cost analysis and budget forecasting.
All functions follow a consistent interface pattern: they accept a dynamic URL and query parameters (typically start and end date strings) and return a typed promise with the statistical data.
Usage
Use these functions when:
- Building the application overview dashboard
- Rendering usage charts and trend visualizations
- Exporting usage reports for stakeholder review
- Implementing alerting thresholds for cost or usage anomalies
Code Reference
Source Location
- Repository: Dify
- File:
web/service/apps.ts(Lines 132-154)
Signature
// Daily message counts -- GET /apps/{appId}/statistics/daily-messages
export const getAppDailyMessages = ({
url,
params,
}: {
url: string
params: Record<string, any>
}): Promise<AppDailyMessagesResponse> => {
return get<AppDailyMessagesResponse>(url, { params })
}
// Daily conversation counts -- GET /apps/{appId}/statistics/daily-conversations
export const getAppDailyConversations = ({
url,
params,
}: {
url: string
params: Record<string, any>
}): Promise<AppDailyConversationsResponse> => {
return get<AppDailyConversationsResponse>(url, { params })
}
// General application statistics -- GET /apps/{appId}/statistics/...
export const getAppStatistics = ({
url,
params,
}: {
url: string
params: Record<string, any>
}): Promise<AppStatisticsResponse> => {
return get<AppStatisticsResponse>(url, { params })
}
// Daily unique end-user counts -- GET /apps/{appId}/statistics/daily-end-users
export const getAppDailyEndUsers = ({
url,
params,
}: {
url: string
params: Record<string, any>
}): Promise<AppDailyEndUsersResponse> => {
return get<AppDailyEndUsersResponse>(url, { params })
}
// Daily token costs -- GET /apps/{appId}/statistics/token-costs
export const getAppTokenCosts = ({
url,
params,
}: {
url: string
params: Record<string, any>
}): Promise<AppTokenCostsResponse> => {
return get<AppTokenCostsResponse>(url, { params })
}
Import
import {
getAppStatistics,
getAppDailyConversations,
getAppDailyMessages,
getAppDailyEndUsers,
getAppTokenCosts,
} from '@/service/apps'
I/O Contract
Inputs
| Name | Type | Required | Description |
|---|---|---|---|
| url | string |
Yes | Dynamic endpoint URL, e.g., apps/{appId}/statistics/daily-conversations
|
| params.start | string |
Yes | Start date for the query range (ISO 8601 date string) |
| params.end | string |
Yes | End date for the query range (ISO 8601 date string) |
Outputs
| Name | Type | Description |
|---|---|---|
| AppDailyMessagesResponse | AppDailyMessagesResponse |
Array of daily message count records with date and count fields |
| AppDailyConversationsResponse | AppDailyConversationsResponse |
Array of daily conversation count records |
| AppStatisticsResponse | AppStatisticsResponse |
Aggregated statistics object with totals and averages |
| AppDailyEndUsersResponse | AppDailyEndUsersResponse |
Array of daily unique end-user count records |
| AppTokenCostsResponse | AppTokenCostsResponse |
Array of daily token cost records with input/output token breakdowns |
Usage Examples
import {
getAppDailyConversations,
getAppDailyMessages,
getAppDailyEndUsers,
getAppTokenCosts,
} from '@/service/apps'
const appId = 'abc-123-def'
const dateParams = { start: '2026-01-01', end: '2026-01-31' }
// Fetch all statistics in parallel for the dashboard
const [conversations, messages, users, tokens] = await Promise.all([
getAppDailyConversations({
url: `apps/${appId}/statistics/daily-conversations`,
params: dateParams,
}),
getAppDailyMessages({
url: `apps/${appId}/statistics/daily-messages`,
params: dateParams,
}),
getAppDailyEndUsers({
url: `apps/${appId}/statistics/daily-end-users`,
params: dateParams,
}),
getAppTokenCosts({
url: `apps/${appId}/statistics/token-costs`,
params: dateParams,
}),
])
// Render dashboard charts
renderConversationChart(conversations.data)
renderMessageChart(messages.data)
renderUserChart(users.data)
renderTokenCostChart(tokens.data)
// Calculate summary metrics
const totalConversations = conversations.data.reduce((sum, d) => sum + d.count, 0)
const totalTokens = tokens.data.reduce((sum, d) => sum + d.input_tokens + d.output_tokens, 0)
console.log(`Total conversations: ${totalConversations}`)
console.log(`Total tokens consumed: ${totalTokens}`)