Overview
Snapshots are Discord server backups. Creation requires CREATE_BACKUPS and restore/delete operations generally require RESTORE_BACKUPS. Sub-user access is supported by local server helpers for snapshot creation and management where the source route allows it.
- Endpoint
POST /api/v3/servers/{serverId}/snapshots- Purpose
- Start snapshot creation
- Permission
CREATE_BACKUPS
- Endpoint
GET /api/v3/snapshots- Purpose
- List accessible snapshots
- Permission
RESTORE_BACKUPS
- Endpoint
GET|PATCH|DELETE /api/v3/snapshots/{snapshotId}- Purpose
- Read/update/delete snapshot metadata
- Permission
RESTORE_BACKUPSfor GET/DELETE,CREATE_BACKUPSfor PATCH
- Endpoint
POST /api/v3/snapshots/{snapshotId}/restore- Purpose
- Start restore
- Permission
RESTORE_BACKUPS
- Endpoint
POST /api/v3/snapshots/{snapshotId}/migrate- Purpose
- Migrate legacy v0 snapshot
- Permission
CREATE_BACKUPS
- Endpoint
POST /api/v3/snapshots/{snapshotId}/previewandGET /api/v3/snapshots/{snapshotId}/preview/attachment/{...path}- Purpose
- Preview snapshot data/assets
- Permission
- Authenticated snapshot access
- Endpoint
DELETE /api/v3/snapshots/pending-roles/{guildId}andPOST /api/v3/snapshots/pending-roles/{guildId}/restore- Purpose
- Manage pending role restoration
- Permission
RESTORE_BACKUPS
Snapshot create, restore, and migrate are asynchronous. A successful API response means the job was started, not that the backup or restore has finished.
Create Snapshot
Start a snapshot job for one server. The handler validates access, checks the server owner's snapshot limit, resolves the server owner's bot, applies plan-based attachment/message limits, and calls the snapshot service.
/api/v3/servers/{serverId}/snapshotsCreate snapshot
Starts an asynchronous snapshot job.
serverIdRequired- Location
- path
- Type
- string
snapshotNameRequired- Location
- body
- Type
- string
snapshotDescriptionOptional- Location
- body
- Type
- string | null
attachmentModeOptional- Location
- body
- Type
- number
- Default
- 0
enableEmojiBackupOptional- Location
- body
- Type
- boolean
- Default
- true
messageCountOptional- Location
- body
- Type
- number
- Default
- 50
excludedChannelsOptional- Location
- body
- Type
- string[]
- Default
- []
{
"snapshotName": "Before launch",
"snapshotDescription": "Pre-launch backup",
"attachmentMode": 1,
"enableEmojiBackup": true,
"messageCount": 250,
"excludedChannels": ["333333333333333333"]
}{
"success": true,
"message": "Snapshot creation started successfully.",
"snapshotId": "snap_abc123"
}List Snapshots
List snapshots owned by the account plus snapshots from shared servers where the user has snapshot permissions.
/api/v3/snapshotsList snapshots
Returns accessible snapshot metadata.
{
"success": true,
"snapshots": [
{
"id": 5,
"snapshotId": "snap_abc123",
"snapshotName": "Before launch",
"snapshotDescription": "Pre-launch backup",
"sourceGuildId": "123456789012345678",
"totalChannels": 32,
"totalRoles": 18,
"totalMembers": 1200,
"totalMessages": 5000,
"totalAttachments": 100,
"totalEmojis": 25,
"pinned": false,
"version": 1,
"createdAt": "2026-06-07T10:30:00.000Z",
"updatedAt": "2026-06-07T10:30:00.000Z",
"isOwner": true,
"canManage": true
}
],
"total": 1,
"subscription": {
"role": "business",
"canCreateSnapshots": true
}
}Snapshot Details
/api/v3/snapshots/{snapshotId}Get snapshot
Returns one snapshot's metadata.
snapshotIdRequired- Location
- path
- Type
- string
/api/v3/snapshots/{snapshotId}Update snapshot
Update snapshot name, description, or pinned state.
snapshotIdRequired- Location
- path
- Type
- string
snapshotNameOptional- Location
- body
- Type
- string
snapshotDescriptionOptional- Location
- body
- Type
- string | null
pinnedOptional- Location
- body
- Type
- boolean
/api/v3/snapshots/{snapshotId}Delete snapshot
Delete snapshot metadata and request snapshot-storage cleanup.
snapshotIdRequired- Location
- path
- Type
- string
The delete route rejects legacy v0 snapshots until they are migrated to the latest format.
Restore Snapshot
Start a restore job into a target Discord server. The caller can provide either an owned bot token or a botId that the server can resolve through access helpers.
/api/v3/snapshots/{snapshotId}/restoreRestore snapshot
Starts an asynchronous snapshot restore job.
snapshotIdRequired- Location
- path
- Type
- string
guildIdRequired- Location
- body
- Type
- string
botTokenOptional- Location
- body
- Type
- string
botIdOptional- Location
- body
- Type
- string
restoreMessageCountOptional- Location
- body
- Type
- number
- Default
- 100
clearServerOptional- Location
- body
- Type
- boolean
- Default
- false
{
"guildId": "222222222222222222",
"botId": "555555555555555555",
"restoreMessageCount": 250,
"clearServer": false
}{
"success": true,
"message": "Snapshot restoration started successfully.",
"data": {
"success": true,
"jobId": "restore_abc123"
}
}Restore Error Mapping
- Service error
NO_ADMIN_PERMISSION,NOT_IN_GUILD,ACCESS_DENIED- API error
403 INSUFFICIENT_PERMISSIONS
- Service error
GUILD_NOT_FOUND- API error
404 NOT_FOUND
- Service error
INVALID_TOKEN,INVALID_TOKEN_FORMAT,NOT_A_BOT,UNAUTHORIZED,FORBIDDEN- API error
401 INVALID_CREDENTIALS
- Service error
- Other unsuccessful service response
- API error
502 EXTERNAL_SERVICE_ERROR
Migrate Snapshot
Start a migration for an older v0 snapshot. The migrated snapshot remains attributed to the snapshot/server owner.
/api/v3/snapshots/{snapshotId}/migrateMigrate snapshot
Starts a v0-to-current snapshot migration job.
snapshotIdRequired- Location
- path
- Type
- string
{
"success": true,
"message": "Snapshot migration started successfully."
}Preview and Attachments
Local routes also include preview endpoints for snapshot content and preview attachments. They are authenticated snapshot-access helpers used by the UI.
- Endpoint
POST /api/v3/snapshots/{snapshotId}/preview- Purpose
- Preview snapshot structure/content
- Notes
- Body may include optional
channelId; response shape is produced by the snapshot service.
- Endpoint
GET /api/v3/snapshots/{snapshotId}/preview/attachment/{...path}- Purpose
- Fetch a preview attachment asset
- Notes
- Path is a catch-all attachment path.
The preview handlers are intentionally documented conservatively because they serve snapshot-service data and assets rather than a small stable JSON object.
Pending Role Restore
Pending role restore endpoints manage role-restoration data saved during snapshot restore flows.
/api/v3/snapshots/pending-roles/{guildId}Delete pending role restore
Cancel and delete pending role restoration data for a target guild/snapshot.
guildIdRequired- Location
- path
- Type
- string
snapshotIdRequired- Location
- query
- Type
- string
/api/v3/snapshots/pending-roles/{guildId}/restoreStart pending role restore
Begin restoring roles from previously saved pending data.
guildIdRequired- Location
- path
- Type
- string
snapshotIdRequired- Location
- body
- Type
- string
- The bot in pending data must still be in the target server.
- Only one role restore should run at a time for a server.
- The endpoints require snapshot restore/manage access.
Status and Errors
- Status/code
200- When it appears
- Successful list, read, update, delete, restore start, migration start, preview, or role-restore action.
- Status/code
201- When it appears
- Snapshot creation started.
- Status/code
400 INVALID_INPUT/VALIDATION_ERROR- When it appears
- Missing snapshot id, invalid server id, invalid body, latest-version migration attempt, or v0 delete attempt.
- Status/code
401 INVALID_CREDENTIALS- When it appears
- Invalid bot token or restore-service token error.
- Status/code
403 INSUFFICIENT_PERMISSIONS/RESOURCE_LIMIT_EXCEEDED- When it appears
- Missing API key permission, missing server access, bot lacks access/admin, or snapshot limit reached.
- Status/code
404 NOT_FOUND- When it appears
- Snapshot, server, or bot not found.
- Status/code
409 RESOURCE_IN_USE- When it appears
- Another snapshot creation is already in progress.
- Status/code
429 RATE_LIMITED- When it appears
- Snapshot or restore service rate limited.
- Status/code
502 EXTERNAL_SERVICE_ERROR/503 SERVICE_UNAVAILABLE- When it appears
- Snapshot, restore, or migration service unavailable or returned an unexpected error.