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.
Structure
Roles & settings
Content
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.
- Manual:
/backup name:... messages:100 media:trueor 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
replacerestore. - API:
POST /v1/backups, see the reference.
Retention is per plan (5 / 25 / 100 versions); older versions are pruned automatically, emergency backups last.
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.
| Plan | Messages per channel | Max attachment size |
|---|---|---|
| Free | 100 | 8 MB |
| Premium | 1 000 | 25 MB |
| Plus | 5 000 | 100 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.
Modes
| Mode | Behaviour |
|---|---|
merge | Creates what is missing and updates what differs. Nothing is deleted. Safe default for partial damage. |
replace | Also 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
Pick a version
Dashboard → Backups → open a version, or/restore version:12. - 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
Review the plan
Counts per category and the full list of operations. - 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./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.
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.
{
"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.
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_rolesorban, - takes an emergency backup,
- opens an incident, posts to the alert channel and optionally DMs the owner,
- emits the
incident.nukewebhook event.
Whitelist trusted admins and other bots under Security → Anti-nuke. Incidents are listed on the overview and in Logs until resolved.
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.
| Status | Meaning |
|---|---|
queued | Waiting for a worker slot. |
running | In progress; progress has total, done, failed, skipped, phase and etaSeconds. |
completed | Finished; result holds the summary. |
failed | Gave up after the max attempts; error has the reason. |
cancelled | Stopped by a user. |