Skip to content

MOTDs

Manage dynamic Message of the Day (MOTD) entries with scopes, scheduling, and optional recurrence.

Scope model

MOTDs are scoped to one of the following types:

  • global
  • server
  • network
  • extension
  • service

Non-global scopes require an id. Scopes can optionally include parent scopes when listing.

List MOTDs (admin)

GET /v1/motds

Query params:

  • scope (required): scope type.
  • scopeId: scope id (required for non-global).
  • includeParents: include parent scopes (default false).
  • activeOnly: filter to active entries (default false).
  • limit: max items (default 250, max 500).

Requires motd:read permission scoped to the requested scope. Parent scopes are only included when the caller also has read permission for them.

Response:

json
{
  "items": [
    {
      "id": "65f2f5b9f2bca8d2a6ad9e22",
      "scope": { "type": "global", "id": null },
      "title": "Winter event",
      "body": "**Welcome** to the winter event.",
      "enabled": true,
      "priority": 10,
      "startsAt": "2026-12-20T00:00:00Z",
      "endsAt": "2027-01-02T00:00:00Z",
      "repeat": null,
      "active": true,
      "createdAt": "2026-02-05T10:12:00Z",
      "updatedAt": null
    }
  ]
}

List MOTDs (public)

GET /v1/public/motds

Same query params as the admin list. activeOnly defaults to true for the public route. No auth required.

Create MOTD

POST /v1/motds

Requires motd:write permission scoped to the target.

Body:

json
{
  "scope": { "type": "server", "id": "eu-survival" },
  "title": "Double XP",
  "body": "Double XP weekend!",
  "enabled": true,
  "priority": 5,
  "startsAt": "2026-02-07T12:00:00Z",
  "endsAt": "2026-02-09T12:00:00Z",
  "repeat": {
    "frequency": "weekly",
    "interval": 1,
    "byWeekday": [5, 6]
  }
}

Notes:

  • body is required and accepts Markdown.
  • repeat requires both startsAt and endsAt.
  • frequency supports daily, weekly, monthly, and yearly.
  • byWeekday uses 0 = Monday, 6 = Sunday.

Update MOTD

PATCH /v1/motds/{motdId}

Requires motd:edit permission scoped to the existing or updated scope.

Body (partial updates allowed):

json
{
  "title": "Updated title",
  "enabled": false,
  "repeatEnabled": false
}

Notes:

  • Set repeatEnabled to false to clear repeat settings.
  • If repeatEnabled is true, you must include a repeat payload.
  • To clear startsAt/endsAt, send an empty string.

Delete MOTD

DELETE /v1/motds/{motdId}

Requires motd:delete permission scoped to the entry.

Response:

json
{ "ok": true }