Recurring messages

Messages the Zyron bot posts in a channel on a schedule — every N seconds, or after every N member messages.

All paths are relative to https://api.zyron.pro/api/v1/guilds/:guildId.

List recurring messages

GET/guilds/:guildId/recurring

Returns the guild's recurring messages along with the limits that apply when writing them back.

json
{
  "items": [
    {
      "_id": "665f1c2ab8d3e14f2a9b1c10",
      "channelId": "234567890123456789",
      "mode": "interval",
      "intervalSeconds": 3600,
      "everyMessages": 50,
      "content": "Don't forget to check the leaderboard!",
      "embed": null,
      "enabled": true,
      "lastSentAt": "2026-07-11T18:30:00.000Z"
    }
  ],
  "limits": {
    "maxItems": 5,
    "minIntervalSeconds": 60,
    "maxIntervalSeconds": 604800,
    "minEveryMessages": 10,
    "maxEveryMessages": 10000,
    "maxContent": 2000
  }
}

Replace recurring messages

PUT/guilds/:guildId/recurring

Full replacement — the body's items array becomes the guild's complete list. Send an empty array to remove all recurring messages.

FieldTypeDescription
itemsrequiredobject[]The new list (max 5 entries).
items[]._idstringEcho the id from GET to keep an item's identity — existing items keep their schedule across updates. Omit for new items.
items[].channelIdrequiredstringThe channel the message is posted in.
items[].mode"interval" | "messages"interval posts every intervalSeconds; messages posts after every everyMessages member messages in the channel. Defaults to interval.
items[].intervalSecondsnumberSeconds between posts in interval mode, 60604800.
items[].everyMessagesnumberMember messages between posts in messages mode, 1010000. Bot messages don't count.
items[].contentstringThe message text, max 2000 characters. Optional when embed is set — but every item needs content, an embed, or both.
items[].embedobject | nullAn embed to send with (or instead of) the text — same shape as trigger embeds.
items[].enabledbooleanDisabled items are kept but never post. Defaults to true.
curl -X PUT https://api.zyron.pro/api/v1/guilds/123456789012345678/recurring \
  -H "Authorization: Bearer zyr_your_guild_key" \
  -H "Content-Type: application/json" \
  -d '{
    "items": [
      {
        "channelId": "234567890123456789",
        "mode": "messages",
        "everyMessages": 100,
        "content": "Use code ZYRON in the item shop!",
        "enabled": true
      }
    ]
  }'

Scheduling behavior

PUT replaces the whole list

Errors

400 invalid_request when a limit is exceeded, a channel id is missing or invalid, an interval or message count is out of range, or an item has neither content nor an embed. See Errors for the shared codes.