Character Chat Sessions API
February 6, 2026 ยท View on GitHub
Manage character chat sessions (conversations) for users. This layer handles session CRUD, metadata, export, and helpers for preparing context for /api/v1/chat/completions.
Tag in OpenAPI: character-chat-sessions
Base URL
/api/v1/chats
Note:
- Conversation metadata endpoints (filters, ranking, analytics, tree view) are under
/api/v1/chat/conversationsand/api/v1/chat/analytics.
Auth + Rate Limits
- Single-user:
X-API-KEY: <key> - Multi-user:
Authorization: Bearer <JWT> - Standard limits apply; a small per-chat throttle is used by the legacy
/completetest endpoint.
Endpoints
- Create session:
POST /api/v1/chats/ - Get session:
GET /api/v1/chats/{chat_id} - Get context (for completions):
GET /api/v1/chats/{chat_id}/context - List sessions:
GET /api/v1/chats/ - Update session:
PUT /api/v1/chats/{chat_id} - Delete session (soft):
DELETE /api/v1/chats/{chat_id} - Export session:
GET /api/v1/chats/{chat_id}/export - Get chat settings:
GET /api/v1/chats/{chat_id}/settings - Update chat settings:
PUT /api/v1/chats/{chat_id}/settings - Prepare character completion payload:
POST /api/v1/chats/{chat_id}/completions - Run character completion (optional persistence/stream):
POST /api/v1/chats/{chat_id}/complete-v2 - Preview prompt assembly and budgets:
POST /api/v1/chats/{chat_id}/prompt-preview - Legacy rate-limit test:
POST /api/v1/chats/{chat_id}/complete
Notes
- Ownership is enforced; only the creator can access their sessions.
- Use the Messages API to send/edit/delete/search messages in a session.
- For LLM replies, call
POST /api/v1/chat/completionswith aconversation_idand optionalcharacter_id.
Character Chat Settings Fields (Selected)
PUT /api/v1/chats/{chat_id}/settings accepts a merged settings object. Selected keys:
chatPresetOverrideId(string|null): Chat-level prompt preset ID used whenpresetScopeis"chat".chatGenerationOverride(object|null): Canonical per-chat generation override block.generationOverrides(object|null): Legacy alias accepted for backward compatibility.presetScope("chat"or"character"): Controls whether chat preset override or character preset is default.
chatGenerationOverride / generationOverrides object shape:
enabled(bool, optional): Iffalse, chat-level generation override is disabled.temperature(number 0.0-2.0, optional)top_p(number 0.0-1.0, optional)repetition_penalty(number 0.0-3.0, optional)stop(array[string], optional)updatedAt(ISO timestamp, optional)
Compatibility and precedence:
- Server reads canonical
chatGenerationOverridefirst. - If missing, server falls back to legacy
generationOverrides. - If both are present, canonical wins.
Examples
Create a session
curl -X POST "http://localhost:8000/api/v1/chats/" \
-H "Content-Type: application/json" -H "X-API-KEY: $API_KEY" \
-d '{"character_id": 42, "title": "Mentor chat"}'
Get chat context for completions
curl -X GET "http://localhost:8000/api/v1/chats/{chat_id}/context" \
-H "X-API-KEY: $API_KEY"
Export as Markdown
curl -X GET "http://localhost:8000/api/v1/chats/{chat_id}/export?format=markdown" \
-H "X-API-KEY: $API_KEY"
List sessions (paginated)
curl -X GET "http://localhost:8000/api/v1/chats/?page=1&per_page=20" \
-H "X-API-KEY: $API_KEY"
Example list response
{
"success": true,
"data": [
{"id": "3f6c...", "character_id": 42, "title": "Mentor chat", "message_count": 5}
],
"metadata": {"page": 1, "per_page": 20, "total": 1, "total_pages": 1}
}