Note that this documentation is created with partial help of GenAI tools.
This document provides comprehensive documentation for all Dexter API endpoints, including request/response formats, authentication, and usage examples.
- Getting Started
- Authentication
- Core Endpoints
- Memory Management
- Session Control
- Health & Monitoring
- Error Handling
- Rate Limiting
- Examples
Production: https://api.dexter-ai.com/api/v1
Development: http://localhost:8000/api/v1
All API requests should use Content-Type: application/json unless otherwise specified.
All responses follow a consistent format:
{
"success": true,
"data": { /* response data */ },
"message": "Operation completed successfully",
"timestamp": "2024-01-15T10:30:00Z",
"request_id": "req_abc123"
}Error responses:
{
"success": false,
"error": {
"code": "VALIDATION_ERROR",
"message": "Invalid input parameters",
"details": { /* specific error details */ }
},
"timestamp": "2024-01-15T10:30:00Z",
"request_id": "req_abc123"
}Dexter uses API key authentication for production environments.
Include your API key in the request headers:
Authorization: Bearer your-api-key-herecurl -X POST https://api.dexter-ai.com/api/v1/chat \
-H "Authorization: Bearer your-api-key-here" \
-H "Content-Type: application/json" \
-d '{
"message": "Hello, how can you help me today?",
"user_id": "user123",
"session_id": "session456"
}'The primary endpoint for conversational interactions with Dexter.
Description: Send a message to Dexter and receive an intelligent response.
Request Body:
{
"message": "string (required) - User's message",
"user_id": "string (required) - Unique user identifier",
"session_id": "string (optional) - Session ID for conversation continuity",
"context": {
"metadata": "object (optional) - Additional context information"
}
}Response:
{
"success": true,
"data": {
"response": "Dexter's response message",
"session_id": "session_abc123",
"tools_used": ["product_search", "semantic_retrieval"],
"memory_updates": {
"semantic_facts_added": 2,
"episodic_events_recorded": 1,
"procedural_patterns_learned": 0
},
"response_metadata": {
"processing_time_ms": 1250,
"confidence_score": 0.95,
"sources_consulted": ["semantic_memory", "episodic_memory"]
}
}
}Example Request:
curl -X POST http://localhost:8000/api/v1/chat \
-H "Content-Type: application/json" \
-d '{
"message": "Find me a wireless gaming headset under $150",
"user_id": "user123"
}'Example Response:
{
"success": true,
"data": {
"response": "I found several excellent wireless gaming headsets under $150. Here are my top recommendations:\n\n1. **SteelSeries Arctis 7P** - $149.99\n - Excellent audio quality with DTS Headphone:X 2.0\n - 24-hour battery life\n - Compatible with PS5, PS4, PC, and mobile\n\n2. **HyperX Cloud Flight** - $129.99\n - 30-hour battery life\n - Detachable noise-cancelling microphone\n - Comfortable for long gaming sessions\n\nWould you like more details about any of these options or see additional choices?",
"session_id": "sess_789xyz",
"tools_used": ["product_search"],
"memory_updates": {
"semantic_facts_added": 1,
"episodic_events_recorded": 1,
"procedural_patterns_learned": 0
}
}
}Description: Get current agent status and capabilities.
Response:
{
"success": true,
"data": {
"status": "online",
"version": "1.0.0",
"capabilities": [
"product_search",
"appointment_booking",
"semantic_retrieval",
"web_search"
],
"memory_systems": {
"semantic_memory": "operational",
"episodic_memory": "operational",
"procedural_memory": "operational",
"session_manager": "operational"
},
"performance_metrics": {
"average_response_time_ms": 875,
"success_rate": 0.98,
"active_sessions": 42
}
}
}Description: Query the semantic memory for relevant facts and knowledge.
Request Body:
{
"query": "string (required) - Search query",
"user_id": "string (required) - User identifier",
"max_results": "integer (optional, default: 10) - Maximum results to return",
"similarity_threshold": "float (optional, default: 0.75) - Minimum similarity score"
}Response:
{
"success": true,
"data": {
"results": [
{
"fact_id": "fact_123",
"content": "User prefers morning appointments",
"similarity_score": 0.89,
"source_session": "session_456",
"created_at": "2024-01-10T09:15:00Z"
}
],
"total_results": 1,
"query_embedding_time_ms": 45
}
}Description: Manually add semantic facts to memory.
Request Body:
{
"facts": [
{
"content": "string (required) - Fact content",
"user_id": "string (required) - User identifier",
"confidence": "float (optional, default: 0.9) - Confidence score",
"source": "string (optional) - Source of the fact"
}
]
}Description: Retrieve episodic events for a user or session.
Query Parameters:
user_id(string, required): User identifiersession_id(string, optional): Specific session IDevent_type(string, optional): Filter by event typestart_date(string, optional): Start date (ISO format)end_date(string, optional): End date (ISO format)limit(integer, optional, default: 50): Maximum results
Response:
{
"success": true,
"data": {
"events": [
{
"event_id": "event_789",
"session_id": "session_456",
"timestamp": "2024-01-15T10:30:00Z",
"event_type": "message",
"content": "User asked about product recommendations",
"context": {
"emotional_tone": "positive",
"user_satisfaction": 0.85
}
}
],
"total_events": 1,
"query_time_ms": 12
}
}Description: Retrieve learned procedural patterns.
Query Parameters:
pattern_type(string, optional): Filter by pattern typemin_success_rate(float, optional): Minimum success rate thresholdlimit(integer, optional, default: 20): Maximum results
Response:
{
"success": true,
"data": {
"patterns": [
{
"pattern_id": "pattern_123",
"pattern_type": "appointment_booking",
"success_rate": 0.92,
"usage_count": 45,
"strategy": {
"steps": ["extract_provider", "check_availability", "suggest_times"],
"tools": ["appointment_tool"]
},
"last_used": "2024-01-15T09:45:00Z"
}
],
"total_patterns": 1
}
}Description: Create a new conversation session.
Request Body:
{
"user_id": "string (required) - User identifier",
"metadata": "object (optional) - Session metadata"
}Response:
{
"success": true,
"data": {
"session_id": "sess_new123",
"user_id": "user456",
"created_at": "2024-01-15T10:30:00Z",
"status": "active"
}
}Description: Get session details and statistics.
Response:
{
"success": true,
"data": {
"session_id": "sess_123",
"user_id": "user456",
"created_at": "2024-01-15T10:30:00Z",
"last_activity": "2024-01-15T10:45:00Z",
"status": "active",
"message_count": 12,
"tools_used": ["product_search", "appointment_tool"],
"engagement_metrics": {
"average_response_time": 2.3,
"user_satisfaction": 0.88,
"conversation_depth": 6
}
}
}Description: Explicitly end a session.
Response:
{
"success": true,
"data": {
"session_id": "sess_123",
"ended_at": "2024-01-15T10:50:00Z",
"final_stats": {
"total_messages": 12,
"duration_minutes": 20,
"tools_used": 3,
"user_satisfaction": 0.88
}
}
}Description: List sessions for a user.
Query Parameters:
user_id(string, required): User identifierstatus(string, optional): Filter by status (active/ended)limit(integer, optional, default: 50): Maximum resultsoffset(integer, optional, default: 0): Results offset
Description: System health status.
Response:
{
"success": true,
"data": {
"status": "healthy",
"services": {
"database": "operational",
"pinecone": "operational",
"memory_systems": "operational",
"tools": "operational"
},
"performance": {
"average_response_time_ms": 875,
"success_rate": 0.98,
"active_sessions": 42,
"requests_per_minute": 120
},
"version": "1.0.0"
}
}Description: Detailed memory system health.
Response:
{
"success": true,
"data": {
"semantic_memory": {
"status": "operational",
"total_facts": 15420,
"average_query_time_ms": 45,
"index_utilization": 0.78
},
"episodic_memory": {
"status": "operational",
"total_events": 89650,
"average_query_time_ms": 12,
"storage_utilization": 0.65
},
"procedural_memory": {
"status": "operational",
"total_patterns": 342,
"average_success_rate": 0.87,
"learning_efficiency": 0.92
},
"session_manager": {
"status": "operational",
"active_sessions": 42,
"total_sessions_today": 156,
"average_session_duration_min": 18
}
}
}Description: Prometheus-compatible metrics endpoint.
Response: Prometheus metrics format
# HELP dexter_requests_total Total requests processed
# TYPE dexter_requests_total counter
dexter_requests_total{method="POST",endpoint="/chat"} 1234
# HELP dexter_response_time_seconds Response time in seconds
# TYPE dexter_response_time_seconds histogram
dexter_response_time_seconds_bucket{le="0.5"} 890
dexter_response_time_seconds_bucket{le="1.0"} 1180
dexter_response_time_seconds_bucket{le="2.0"} 1220
dexter_response_time_seconds_bucket{le="+Inf"} 1234
| Code | Description | HTTP Status |
|---|---|---|
VALIDATION_ERROR |
Invalid request parameters | 400 |
AUTHENTICATION_ERROR |
Invalid or missing API key | 401 |
AUTHORIZATION_ERROR |
Insufficient permissions | 403 |
NOT_FOUND |
Resource not found | 404 |
RATE_LIMIT_EXCEEDED |
Too many requests | 429 |
INTERNAL_ERROR |
Server error | 500 |
SERVICE_UNAVAILABLE |
Service temporarily unavailable | 503 |
{
"success": false,
"error": {
"code": "VALIDATION_ERROR",
"message": "Invalid input parameters",
"details": {
"field": "user_id",
"issue": "Required field missing"
}
},
"timestamp": "2024-01-15T10:30:00Z",
"request_id": "req_abc123"
}{
"success": false,
"error": {
"code": "VALIDATION_ERROR",
"message": "Missing required field: user_id",
"details": {
"required_fields": ["user_id", "message"],
"provided_fields": ["message"]
}
}
}{
"success": false,
"error": {
"code": "NOT_FOUND",
"message": "Session not found",
"details": {
"session_id": "sess_invalid123",
"suggestion": "Create a new session or verify the session ID"
}
}
}Dexter implements rate limiting to ensure fair usage and system stability.
- Authenticated requests: 1000 requests per hour per API key
- Chat endpoint: 60 requests per minute per user
- Memory queries: 300 requests per hour per user
X-RateLimit-Limit: 1000
X-RateLimit-Remaining: 999
X-RateLimit-Reset: 1642252800
X-RateLimit-Window: 3600{
"success": false,
"error": {
"code": "RATE_LIMIT_EXCEEDED",
"message": "Rate limit exceeded",
"details": {
"limit": 60,
"window_seconds": 60,
"retry_after_seconds": 45
}
}
}// 1. Start a new session
const sessionResponse = await fetch('/api/v1/sessions', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer your-api-key'
},
body: JSON.stringify({
user_id: 'user123'
})
});
const { session_id } = (await sessionResponse.json()).data;
// 2. Send a message
const chatResponse = await fetch('/api/v1/chat', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer your-api-key'
},
body: JSON.stringify({
message: 'Find me a good laptop for programming',
user_id: 'user123',
session_id: session_id
})
});
const chatResult = await chatResponse.json();
console.log(chatResult.data.response);
// 3. Continue conversation
const followUpResponse = await fetch('/api/v1/chat', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer your-api-key'
},
body: JSON.stringify({
message: 'What about gaming laptops under $2000?',
user_id: 'user123',
session_id: session_id
})
});
// 4. End session when done
await fetch(`/api/v1/sessions/${session_id}/end`, {
method: 'POST',
headers: {
'Authorization': 'Bearer your-api-key'
}
});import requests
# Query semantic memory for user preferences
response = requests.post(
'http://localhost:8000/api/v1/memory/semantic/query',
json={
'query': 'appointment preferences',
'user_id': 'user123',
'max_results': 5,
'similarity_threshold': 0.75
},
headers={'Authorization': 'Bearer your-api-key'}
)
facts = response.json()['data']['results']
for fact in facts:
print(f"Fact: {fact['content']} (Score: {fact['similarity_score']})")// Example webhook handler for chat completions
app.post('/webhook/chat-complete', (req, res) => {
const { session_id, user_id, response_data } = req.body;
// Process completion event
console.log(`Chat completed for session: ${session_id}`);
console.log(`User satisfaction: ${response_data.user_satisfaction}`);
// Acknowledge receipt
res.json({ success: true, processed: true });
});
// Register webhook with Dexter (if webhooks are configured)
const webhookResponse = await fetch('/api/v1/webhooks', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer your-api-key'
},
body: JSON.stringify({
url: 'https://your-app.com/webhook/chat-complete',
events: ['chat.completed', 'session.ended'],
secret: 'your-webhook-secret'
})
});For more information, see: