ryOS ryOS / Docs
GitHub Launch

Messages API

Endpoints for sending, retrieving, and managing messages in chat rooms.

Overview

Messages are the core communication unit in chat rooms. Authenticated users can send messages, and read access depends on room visibility (public/private membership).

Endpoint Summary

MethodEndpointDescriptionAuth
GET/api/rooms/{id}/messagesList messagesNo
POST/api/rooms/{id}/messagesSend messageYes
DELETE/api/rooms/{id}/messages/{messageId}Delete messageYes (admin)
GET/api/messages/bulk?roomIds=...Bulk fetch messagesNo

Endpoints

List Messages

Get message history for a room.

GET /api/rooms/{id}/messages?limit=50
Query Parameters:
ParameterTypeRequiredDescription
limitnumberNoMax messages to return (default: 20, max: 500)
Response (200):
{
  "messages": [
    {
      "id": "msg123",
      "roomId": "general",
      "username": "alice",
      "content": "Hello everyone!",
      "timestamp": 1704067200000
    },
    {
      "id": "msg124",
      "roomId": "general",
      "username": "bob",
      "content": "Hi Alice!",
      "timestamp": 1704067260000
    }
  ]
}

Send Message

Send a message to a room. Requires authentication.

POST /api/rooms/{id}/messages
Authorization: Bearer {token}
X-Username: alice
Content-Type: application/json

{
  "content": "Hello world!"
}
Request Body:
FieldTypeRequiredDescription
contentstringYesMessage content (max 1000 chars)
Response (201):
{
  "message": {
    "id": "msg125",
    "roomId": "general",
    "username": "alice",
    "content": "Hello world!",
    "timestamp": 1704067320000
  }
}

Delete Message (Admin)

Delete a specific message. Admin only.

DELETE /api/rooms/{roomId}/messages/{messageId}
Authorization: Bearer {token}
X-Username: ryo
Response (200):
{
  "success": true
}

Bulk Fetch Messages

Fetch messages from multiple rooms in a single request.

GET /api/messages/bulk?roomIds=general,random,private123
Query Parameters:
ParameterTypeRequiredDescription
roomIdsstringYesComma-separated room IDs
Response (200):
{
  "messagesMap": {
    "general": [{ "id": "msg123", "username": "alice", "content": "Hello!", "timestamp": 1704067200000 }],
    "random": []
  },
  "validRoomIds": ["general", "random"],
  "invalidRoomIds": ["private123"]
}

Rate Limits

Messages in public rooms have burst protection:

Limit TypeWindowMax Messages
Short burst10 seconds3 messages
Long burst1 minute20 messages
Min interval-2 seconds between messages

Private rooms have relaxed rate limits.

Message Format

Messages contain the following fields:

FieldTypeDescription
idstringUnique message identifier
roomIdstringRoom the message belongs to
usernamestringAuthor's username
contentstringMessage text content
timestampnumberUnix timestamp (milliseconds)

Error Responses

StatusErrorDescription
400Invalid requestMissing or invalid parameters
400Message exceeds maximum length of 1000Message too long
401Authentication requiredToken missing or invalid
403ForbiddenNot authorized to delete (non-admin)
404Room not foundRoom ID doesn't exist
404Message not foundMessage ID doesn't exist
429Rate limit exceededToo many messages too quickly

Related