Guide

Backups & restore

A backup is a versioned, compressed snapshot of the whole server, messages and media included. Restores are planned first, executed second, and never without a safety backup.

What is saved

Structure

Categories, text / voice / forum / stage / announcement channels, positions, topics, slowmode, NSFW, permission overwrites.

Roles & settings

Roles with colors, icons, hoist, mentionable, permissions; server name, icon, banner, verification level, AFK and system channels, locale.

Content

Emojis, stickers, bans with reasons, AutoMod rules, member role assignments and nicknames, and the last N messages of every channel.

Snapshots are stored as gzip JSON on Keepcord storage with a version number per server. Download them any time from the dashboard or the API, the format is documented in the file itself.

Creating backups

  • Manual: /backup name:... messages:100 media:true or Backups → New backup in the dashboard.
  • Scheduled: weekly on Free, daily on Premium, hourly on Plus. Set under Security → Backups.
  • Emergency: taken automatically by anti-nuke when an incident is detected and before every replace restore.
  • API: POST /v1/backups, see the reference.

Retention is per plan (5 / 25 / 100 versions); older versions are pruned automatically, emergency backups last.

Messages & media

Each backup stores the latest messages of every text, announcement and forum channel: content, embeds, author (id, name, avatar), timestamps, reactions count, pins and attachments. Photos, GIFs and files are downloaded and stored next to the snapshot so they survive even if the Discord CDN link expires.

PlanMessages per channelMax attachment size
Free1008 MB
Premium1 00025 MB
Plus5 000100 MB

The default per server is set under Security → Backups and can be lowered per backup. In the dashboard a backup opens with a channel browser that renders the messages Discord-style, media included.

Restoring

Modes

ModeBehaviour
mergeCreates what is missing and updates what differs. Nothing is deleted. Safe default for partial damage.
replaceAlso deletes roles, channels, emojis and bans that are not in the backup. Asks for confirmation and takes a pre-restore backup first.

Dry run

Every restore starts as a plan: Keepcord diffs the backup against the live server and shows the list of creates, updates and deletes. In Discord the dry run is the default of /restore; in the dashboard the plan is shown before the Confirm button.

  1. 1

    Pick a version

    Dashboard → Backups → open a version, or /restore version:12.
  2. 2

    Choose what to restore

    Roles, channels, settings, emojis, stickers, bans, AutoMod, member roles, messages (re-posted through webhooks with the original author name and avatar).
  3. 3

    Review the plan

    Counts per category and the full list of operations.
  4. 4

    Confirm

    The restore runs as a job with live progress and is resumable after a bot restart. Channels and roles are mapped by name and position so permissions keep pointing to the right objects.

Discord limits

Role and channel creation is rate-limited by Discord; a full rebuild of a large server takes minutes, not seconds. Message re-posting is capped per channel and uses webhooks, so re-posted messages cannot be attributed to the original user id.

Comparing versions

/diff from:10 to:12 or Backups → Compare shows added, removed and changed roles, channels, emojis, bans and AutoMod rules between two versions, or between a version and the live server. Useful to see what a raid changed before deciding between merge and replace.

Member pull

Pull re-adds every verified member using the stored authorization. It runs as a job, respects the concurrency and cooldown of the plan, skips blacklisted members, optionally restores roles and nicknames, and can pull from the authorizations of another server you own into a brand-new one.

Pull options
{
  "restoreRoles": true,
  "restoreNicknames": true,
  "extraRoleIds": ["1210000000000000001"],
  "skipBlacklisted": true,
  "skipFlagged": false,
  "minTrustScore": 20,
  "sourceGuildId": "987654321098765432",
  "roleMap": { "<role id in source>": "<role id here>" },
  "userIds": []
}

Tokens expire after seven days; Keepcord refreshes them in the background so they are valid when you need them. Members who revoked the app from Discord cannot be pulled and are listed as revoked.

Anti-nuke

Keepcord watches the audit log. When one account performs more than the threshold of destructive actions (channel or role deletes, bans, kicks, webhook deletes) inside the time window, it:

  • runs the action you chose: alert, strip_roles or ban,
  • takes an emergency backup,
  • opens an incident, posts to the alert channel and optionally DMs the owner,
  • emits the incident.nuke webhook event.

Whitelist trusted admins and other bots under Security → Anti-nuke. Incidents are listed on the overview and in Logs until resolved.

Jobs

Pull, backup, restore, mass role, unrole and kick-unverified all run as jobs with a progress bar, ETA and a cancel button. A job interrupted by a bot restart resumes from its cursor. /jobs lists and cancels them from Discord; the Jobs page shows five per page with full history.

StatusMeaning
queuedWaiting for a worker slot.
runningIn progress; progress has total, done, failed, skipped, phase and etaSeconds.
completedFinished; result holds the summary.
failedGave up after the max attempts; error has the reason.
cancelledStopped by a user.