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:
globalservernetworkextensionservice
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 (defaultfalse).activeOnly: filter to active entries (defaultfalse).limit: max items (default250, max500).
Requires motd:read permission scoped to the requested scope. Parent scopes are only included when the caller also has read permission for them.
Response:
{
"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:
{
"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:
bodyis required and accepts Markdown.repeatrequires bothstartsAtandendsAt.frequencysupportsdaily,weekly,monthly, andyearly.byWeekdayuses 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):
{
"title": "Updated title",
"enabled": false,
"repeatEnabled": false
}Notes:
- Set
repeatEnabledtofalseto clear repeat settings. - If
repeatEnabledistrue, you must include arepeatpayload. - To clear
startsAt/endsAt, send an empty string.
Delete MOTD
DELETE /v1/motds/{motdId}
Requires motd:delete permission scoped to the entry.
Response:
{ "ok": true }