GET /api/threads/{id}/messages
Retrieve all messages in a thread
GET
Authentication
Conditional (Line 198):[AllowAnonymous]
Follows same access rules as GET /api/threads/
Path Parameters
string
required
Thread UUIDFormat: Valid GUIDValidation: Route constraint
:guid (Line 197)Response
array
Array of message objects
Authorization Logic
Identical to GET /api/threads/ (Lines 203-249):Access Control Matrix
Side Effects
Database Reads (Lines 204, 216, 251):- SELECT from
threadstable WHEREthread_id = {id} - SELECT from
system_settingstable WHEREkey = 'public_sharing' - SELECT from
thread_messagestable WHEREthread_id = {id}
Permissions
Same as Thread Access:- If user can read thread, user can read messages
- No separate message-level permissions
Edge Cases
- Thread doesn’t exist: 404 (Lines 206-214)
- Thread exists but has zero messages: Returns
{"items": []}(Line 253) - Invalid GUID format: 400 (route constraint)
- Deleted thread: 404 (service returns null for thread)
- Orphaned messages (thread deleted): Cannot occur (thread lookup first)
- Partial message data (model2 null in single-chat): Nullable fields return null
Error Conditions
Exception Handling (Lines 255-263):
Behavioral Guarantees
Two-Step Verification (Lines 204-249):- Thread existence + access check
- Messages retrieval
- Thread could be deleted between checks (race condition)
- Service behavior on race condition not enforced by server contract
- Returns ALL messages for thread
- No limit parameter
- Could cause performance issues for large threads
Performance Characteristics
Database Queries: 3 queries per request- Thread lookup
- Feature flag lookup
- Messages retrieval
thread_messages.thread_idshould be indexedthreads.thread_idprimary key
Message Schema Details
Single-Chat Mode:model1_id: Populatedmodel2_id: NULLmodel1_response: Populatedmodel2_response: NULLcomparison_id: NULL
model1_id: Populatedmodel2_id: Populatedmodel1_response: Populatedmodel2_response: Populatedcomparison_id: Populated (links tocomparisonstable)
- Can be used with GET /api/arena/model-stats to see vote data
- Links message to arena comparison for voting