Replies and attachments

Messages are plain text and may include media attachments. Staff may add internal notes that customers cannot see. Internal notes update case activity but do not change status.

GET .../messages returns each message with its attachments (media_id, file_name, mime_type). The Flutter case thread shows image thumbnails for both the customer and platform staff.

Public replies update workflow status automatically (including reopening from resolved). Closed cases reject new replies and attachments.

Upload files with media-service first (MIME/size validation there), then attach the returned media_id to the case or message.