Servers
Server API for RestoreCord: list, create, read, update and delete Discord server configurations and settings, and manage verification links with an API key.
Overview
Server endpoints manage RestoreCord server configurations. They require scoped API keys with READ_SERVERS for reads and WRITE_SERVERS for writes.
| Endpoint group | Auth | Notes |
|---|---|---|
GET|POST /api/v3/servers | API key with READ_SERVERS / WRITE_SERVERS | List and create server configurations. |
GET|PATCH|DELETE /api/v3/servers/{serverId} | API key with READ_SERVERS / WRITE_SERVERS | Read, update, and delete a server. Some update fields are plan or owner gated. |
Server-scoped paths use the internal numeric servers[].id value as serverId. Discord guild ids remain guildId fields and body values.
List Servers
List owned servers and servers shared with the authenticated account. Shared entries include effective sub-user permissions and the owner's plan role.
Returns owned and shared RestoreCord server configurations.
GET /api/v3/serversAuth: API key with READ_SERVERS.
{
"success": true,
"servers": [
{
"id": 42,
"name": "community",
"guildId": "123456789012345678",
"roleId": "987654321098765432",
"picture": "https://cdn.example.com/icon.png",
"description": "Main community server",
"bgImage": null,
"banner": null,
"createdAt": "2026-06-07T10:30:00.000Z",
"customBotId": 12,
"pulling": false,
"importing": false,
"groupName": null,
"vpncheck": true,
"blockAlts": false,
"blockWireless": false,
"passwordLocked": false,
"captcha": true,
"verified": true,
"unlisted": false,
"private": false,
"nsfw": false,
"discovery": false,
"isShared": false,
"accessType": "owner",
"permissions": null,
"ownerRole": "business"
}
],
"total": 1,
"groups": {}
}Response Fields
| Field | Type | Notes |
|---|---|---|
servers[].id | number | Internal RestoreCord server id. |
servers[].guildId | string | Discord guild id. |
servers[].roleId | string | Verified role id. |
servers[].accessType | string | owner or sub-user. |
servers[].permissions | array | null | Effective sub-user permissions, null for owners. |
groups | object | User-defined server grouping map. |
Create Server
Create a server configuration using a custom bot and Discord role ids. Discord ids must be valid, the server name, guild and role ids must not already be in use, and the plan server limit applies.
Create a RestoreCord server configuration.
POST /api/v3/serversProp
Type
Auth: API key with WRITE_SERVERS.
{
"guildId": "123456789012345678",
"roleId": "987654321098765432",
"serverName": "community",
"customBotId": "555555555555555555",
"roleMode": 0
}{
"success": true,
"message": "Server created successfully.",
"server": {
"id": 42,
"name": "community",
"guildId": "123456789012345678",
"roleId": "987654321098765432",
"customBotId": 12
}
}Plan Limits
| Plan | Server limit |
|---|---|
| Free | 1 |
| Premium | 5 |
| Business | 50 |
| Enterprise | 50 |
Get Server
Return a detailed server configuration. Owners and sub-users with any access can read server details. Firewall objects are only included when the caller has firewall access.
Returns detailed settings and access context.
GET /api/v3/servers/{serverId}Prop
Type
Auth: API key with READ_SERVERS.
{
"success": true,
"server": {
"name": "community",
"guildId": "123456789012345678",
"roleId": "987654321098765432",
"unverifiedRoleId": null,
"roleMode": 0,
"customBotId": 12,
"redirectUrl": null,
"vpncheck": true,
"blockAlts": false,
"blockWireless": false,
"passwordLocked": false,
"ipLogging": true,
"captcha": true,
"additionalPullServers": [],
"discovery": []
},
"access": {
"isOwner": true,
"permissions": []
},
"botInfo": {
"id": 12,
"clientId": "555555555555555555"
}
}The exact get-server response includes many settings and media URLs. Treat the example as representative and rely on field presence checks for optional settings. Bot tokens are never included in API-key responses.
Update Server
Patch server settings. This route covers identity, branding, security, feature flags, discovery, permission entries, firewall shortcut actions, and additional pull servers.
Update any supplied server settings.
PATCH /api/v3/servers/{serverId}Prop
Type
Auth: API key with WRITE_SERVERS. Firewall shortcut updates also require SERVER_FIREWALL.
{
"description": "Main community verification",
"vpncheck": true,
"captcha": true,
"minAccountAge": 7
}{
"success": true,
"message": "Server settings updated successfully.",
"server": {
"name": "community",
"guildId": "123456789012345678",
"roleId": "987654321098765432",
"description": "Main community verification",
"vpncheck": true,
"captcha": true,
"minAccountAge": 7
}
}Update Gates
| Field/action | Gate |
|---|---|
guildId, roleId | Owner only. |
background, banner | Business or Enterprise. |
vpncheck, blockAlts, autoBanAlts, displayAccountBadges | Premium or higher to turn on. |
saveEmail, profile | Business or higher to turn on. |
themeColor | Business or higher to change. Setting it back to the default 4f46e5 works on any plan. |
redirectUrl | Business or higher to set or change. Clearing it works on any plan. |
blockWireless, passwordLocked, authorizeOnly | Enterprise to turn on. |
minAccountAge | Enterprise to set above 0. |
additionalPullServers | Owner only and Business or Enterprise. |
| Firewall shortcut objects | SERVER_FIREWALL API key permission. Same plan rules as the firewall endpoints: Premium for rules and Enterprise for passwords. |
autoAddMember, additionalPullServers | Require the guilds.join OAuth scope. |
Delete Server
Delete a server and its associated data, including members, firewall data, sub-user permissions, migrations, discovery listings, and feedback. Active migrations block deletion.
Permanently delete one owned server configuration and associated data.
DELETE /api/v3/servers/{serverId}Prop
Type
Auth: API key with WRITE_SERVERS.
{
"success": true,
"message": "Server deleted successfully."
}Verification Links
Tracking links give each promotion its own verify link. Each link has a generated 12-character code, and every member who first verifies through it is counted against that link. The verify page accepts the code as the path (/verify/<code>) or as an r query parameter on the normal server URL (/verify/<name or guildId>?r=<code>). The number of links per server depends on the owner plan (Free 2, Premium 10, Business 50, Enterprise 250).
List verification links
Return the server's tracking links with verified-member counts and shareable URLs.
GET /api/v3/servers/{serverId}/verification-linksProp
Type
Auth: API key with READ_SERVERS.
{
"success": true,
"canManage": true,
"limit": 10,
"links": [
{
"id": 7,
"code": "ce23a0d85428",
"name": "Partner server promo",
"createdAt": "2026-10-04T10:30:00.000Z",
"verifiedCount": 312,
"verifyUrl": "https://restorecord.com/verify/ce23a0d85428",
"verifyServerUrl": "https://restorecord.com/verify/Community?r=ce23a0d85428",
"authorizeUrl": "https://discord.com/oauth2/authorize?client_id=...&state=...&prompt=none"
}
]
}Create verification link
Create a tracking link. The code is always generated by RestoreCord.
POST /api/v3/servers/{serverId}/verification-linksProp
Type
Delete verification link
Delete a tracking link. Members who verified through it are kept, and the link name is retained for them.
DELETE /api/v3/servers/{serverId}/verification-links/{linkId}Prop
Type
Auth: API key with WRITE_SERVERS for create and delete.
- Attribution is first-touch: a member who already verified on the server keeps their original source when they verify again through another link.
- Members verified through a link can be listed with the
linkquery parameter of the members endpoint. - Creating a link with a name that already exists on the server returns
409 DUPLICATE_RESOURCE; exceeding the plan limit returns403 RESOURCE_LIMIT_EXCEEDED.
Use the dedicated API reference pages for members, migrations, snapshots, firewall, and webhooks. Those server-scoped features live under server paths but have their own contracts.
Status and Errors
| Status/code | When it appears |
|---|---|
200 | Successful read, update, or delete response. |
201 | Server created. |
400 MISSING_FIELD | Required create field missing. |
400 INVALID_INPUT / VALIDATION_ERROR | Bad Discord id, server name, URL, role mode, OAuth payload, or update schema. |
401 UNAUTHORIZED | Missing, invalid, revoked, or expired API key. |
403 FORBIDDEN / INSUFFICIENT_PERMISSIONS | Missing API key permission, missing sub-user permission, owner-only field mutation, plan-gated field, or Discord permission failure. |
404 NOT_FOUND | Server, bot, or tracking link not found or inaccessible. |
409 DUPLICATE_RESOURCE | Duplicate server name, guild id, or role id. |
409 RESOURCE_IN_USE | Deleting a server with active migrations. |
429 RATE_LIMITED | Endpoint rate limit exceeded. |
- Use internal RestoreCord server ids in
{serverId}path params; useguildIdonly where a body or query field explicitly asks for a Discord guild id. - Use dedicated firewall endpoints instead of the PATCH server firewall shortcut objects for new integrations.