Conversation endpoints let you browse AI chat history, view conversation analytics, flag problematic messages, and review the flag queue. All endpoints require admin-level permissions (ADMINISTRATOR). Requests are rate-limited to 60 requests per minute per IP.
GET /guilds/:id/conversations
Returns AI conversations grouped by channel and time proximity. Messages within 15 minutes in the same channel are grouped into a single conversation. Defaults to the last 30 days.
Authentication : API key or JWT Bearer token required.
Path parameters
Query parameters
Conversations per page. Default: 25. Maximum: 100.
Full-text search in message content.
Filter by exact username.
Start date filter in ISO 8601 format. Defaults to 30 days ago if omitted.
End date filter in ISO 8601 format.
Response fields
List of grouped conversation summaries. Show Conversation object fields
ID of the first message in the conversation.
Human-readable channel name from the Discord cache.
List of { username, role } objects for all participants.
Total messages in the conversation.
ISO 8601 timestamp of the first message.
ISO 8601 timestamp of the most recent message.
First 100 characters of the opening message.
Total number of matching conversations.
Example
curl -H "x-api-secret: YOUR_SECRET" \
"https://volvox.bot/api/v1/guilds/987654321098765432/conversations?search=deployment&limit=10"
{
"conversations" : [
{
"id" : 10042 ,
"channelId" : "111222333" ,
"channelName" : "ai-chat" ,
"participants" : [
{ "username" : "alice" , "role" : "user" },
{ "username" : "Volvox" , "role" : "assistant" }
],
"messageCount" : 6 ,
"firstMessageAt" : "2026-03-20T14:00:00.000Z" ,
"lastMessageAt" : "2026-03-20T14:12:00.000Z" ,
"preview" : "How do I deploy to Kubernetes?"
}
],
"total" : 1 ,
"page" : 1
}
GET /guilds/:id/conversations/stats
Returns aggregate statistics about AI conversations for the guild.
Authentication : API key or JWT Bearer token required.
Path parameters
Response fields
Total number of distinct conversations.
Total number of individual messages.
avgMessagesPerConversation
Average message count per conversation.
Top 10 users by message count. Each item has username and messageCount.
Message counts per day for the last 30 days. Each item has date (ISO date) and count.
Estimated total token count based on character length (roughly 4 characters per token).
Example
curl -H "x-api-secret: YOUR_SECRET" \
https://volvox.bot/api/v1/guilds/987654321098765432/conversations/stats
{
"totalConversations" : 3241 ,
"totalMessages" : 18500 ,
"avgMessagesPerConversation" : 6 ,
"topUsers" : [
{ "username" : "alice" , "messageCount" : 420 }
],
"dailyActivity" : [
{ "date" : "2026-03-20" , "count" : 112 }
],
"estimatedTokens" : 240000
}
GET /guilds/:id/conversations/flags
Returns flagged AI messages with an optional status filter.
Authentication : API key or JWT Bearer token required.
Path parameters
Query parameters
Items per page. Default: 25. Maximum: 100.
Filter by flag status. Options: open, resolved, dismissed.
Response fields
List of flag records. ID of the first message in the flagged conversation.
ID of the specific flagged message.
User ID or api-secret who created the flag.
Optional additional notes.
Flag status: open, resolved, or dismissed.
User who resolved the flag.
ISO 8601 timestamp when resolved.
ISO 8601 timestamp when the flag was created.
Content of the flagged message.
Role of the flagged message sender.
Username of the flagged message sender.
Example
curl -H "x-api-secret: YOUR_SECRET" \
"https://volvox.bot/api/v1/guilds/987654321098765432/conversations/flags?status=open"
{
"flags" : [
{
"id" : 7 ,
"guildId" : "987654321098765432" ,
"conversationFirstId" : 10042 ,
"messageId" : 10045 ,
"flaggedBy" : "222000222" ,
"reason" : "Inappropriate content" ,
"notes" : null ,
"status" : "open" ,
"resolvedBy" : null ,
"resolvedAt" : null ,
"createdAt" : "2026-03-20T15:00:00.000Z" ,
"messageContent" : "This is the flagged response..." ,
"messageRole" : "assistant" ,
"messageUsername" : "Volvox"
}
],
"total" : 1 ,
"page" : 1
}
GET /guilds/:id/conversations/:conversationId
Returns all messages in a conversation for replay, including flag status, token estimates, and Discord jump URLs.
Authentication : API key or JWT Bearer token required.
Path parameters
The ID of the first message in the conversation.
Response fields
Ordered list of messages in the conversation. Show Message object fields
Message role: user or assistant.
Flag status if flagged: open, resolved, or dismissed.
Native Discord message ID for jump URLs.
Full Discord jump URL for the message.
Human-readable channel name.
Conversation duration in seconds.
Estimated token count for the entire conversation.
Example
curl -H "x-api-secret: YOUR_SECRET" \
https://volvox.bot/api/v1/guilds/987654321098765432/conversations/10042
{
"messages" : [
{
"id" : 10042 ,
"role" : "user" ,
"content" : "How do I deploy to Kubernetes?" ,
"username" : "alice" ,
"createdAt" : "2026-03-20T14:00:00.000Z" ,
"flagStatus" : null ,
"discordMessageId" : "1234567890" ,
"messageUrl" : "https://discord.com/channels/987654321/111222333/1234567890"
},
{
"id" : 10043 ,
"role" : "assistant" ,
"content" : "To deploy to Kubernetes, you first need..." ,
"username" : "Volvox" ,
"createdAt" : "2026-03-20T14:00:05.000Z" ,
"flagStatus" : null ,
"discordMessageId" : "1234567891" ,
"messageUrl" : "https://discord.com/channels/987654321/111222333/1234567891"
}
],
"channelId" : "111222333" ,
"channelName" : "ai-chat" ,
"duration" : 720 ,
"tokenEstimate" : 512
}
POST /guilds/:id/conversations/:conversationId/flag
Flags a specific AI message in a conversation for moderator review.
Authentication : API key or JWT Bearer token required.
Path parameters
The conversation ID (first message ID).
Request body
ID of the specific message to flag.
Reason for flagging. Maximum 500 characters.
Optional additional notes. Maximum 2,000 characters.
Response fields
ID of the created flag record.
Example
curl -X POST \
-H "x-api-secret: YOUR_SECRET" \
-H "Content-Type: application/json" \
-d '{"messageId": 10045, "reason": "Inappropriate content"}' \
https://volvox.bot/api/v1/guilds/987654321098765432/conversations/10042/flag
{
"flagId" : 7 ,
"status" : "open"
}