Backend REST API for the Grafana AI Chat Assistant plugin.
Base URL: /api/plugins/cisco-aichat-app/resources
Health check endpoint.
Response:
{
"status": "ok",
"message": "AI Chat Assistant backend is running"
}Returns provisioned plugin settings.
Response:
{
"provisioned": true,
"systemPrompt": "You are a helpful assistant.",
"maxTokens": 4096,
"temperature": 0.7,
"enableMcpTools": true
}List all chat sessions for the current user.
Response:
{
"sessions": [
{
"id": "session-abc123",
"name": "My Chat",
"createdAt": "2025-01-15T10:30:00Z",
"updatedAt": "2025-01-15T11:45:00Z",
"isActive": true
}
],
"total": 1
}Create a new chat session.
Request:
{
"id": "session-abc123",
"name": "My Chat"
}Response: 201 Created
{
"id": "session-abc123",
"name": "My Chat",
"messages": []
}Get a specific session with all messages.
Response:
{
"id": "session-abc123",
"name": "My Chat",
"messages": [
{
"id": "msg-xyz789",
"role": "user",
"content": "Hello",
"timestamp": "2025-01-15T10:30:00Z"
}
]
}Update a session (name or messages).
Request:
{
"name": "Updated Name",
"messages": [...]
}Response:
{
"id": "session-abc123",
"name": "Updated Name",
"messages": [...]
}Delete a session.
Response:
{
"success": true,
"message": "Session deleted successfully",
"sessionId": "session-abc123"
}Add a message to a session.
Request:
{
"id": "msg-xyz789",
"role": "user",
"content": "Hello, how can you help?"
}Response: 201 Created
{
"id": "msg-xyz789",
"role": "user",
"content": "Hello, how can you help?"
}Update a message's content.
Request:
{
"content": "Updated message content"
}Response:
{
"success": true,
"message": "Message updated successfully",
"messageId": "msg-xyz789"
}Set a session as the active session.
Response:
{
"success": true,
"message": "Session activated successfully",
"sessionId": "session-abc123"
}Delete all sessions for the current user.
Response:
{
"success": true,
"message": "All chat history cleared successfully"
}Report LLM usage telemetry from the frontend.
Request:
{
"model": "gpt-4",
"requestDurationMs": 1500,
"inputTokens": 100,
"outputTokens": 250,
"ttftMs": 350,
"success": true
}Response:
{
"success": true
}Prometheus metrics endpoint for observability.
Response: Prometheus text format
# HELP grafana_aichat_plugin_up Plugin health status
# TYPE grafana_aichat_plugin_up gauge
grafana_aichat_plugin_up 1
All endpoints return errors in a standard format:
{
"error": "error message"
}HTTP Status Codes:
400- Bad request (invalid input, malformed JSON)401- Unauthorized (authentication required)404- Not found (session or message does not exist)405- Method not allowed429- Too many requests (rate limit exceeded)500- Internal server error
- Session IDs: alphanumeric, underscores, hyphens (1-128 chars)
- Message IDs: alphanumeric, underscores, hyphens (1-128 chars)
- Session names: max 256 chars, no control characters
- Message content: max 100,000 chars, no control characters