API Reference

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 groupAuthNotes
GET|POST /api/v3/serversAPI key with READ_SERVERS / WRITE_SERVERSList and create server configurations.
GET|PATCH|DELETE /api/v3/servers/{serverId}API key with READ_SERVERS / WRITE_SERVERSRead, 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/servers

Auth: 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

FieldTypeNotes
servers[].idnumberInternal RestoreCord server id.
servers[].guildIdstringDiscord guild id.
servers[].roleIdstringVerified role id.
servers[].accessTypestringowner or sub-user.
servers[].permissionsarray | nullEffective sub-user permissions, null for owners.
groupsobjectUser-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/servers

Prop

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

PlanServer limit
Free1
Premium5
Business50
Enterprise50

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/actionGate
guildId, roleIdOwner only.
background, bannerBusiness or Enterprise.
vpncheck, blockAlts, autoBanAlts, displayAccountBadgesPremium or higher to turn on.
saveEmail, profileBusiness or higher to turn on.
themeColorBusiness or higher to change. Setting it back to the default 4f46e5 works on any plan.
redirectUrlBusiness or higher to set or change. Clearing it works on any plan.
blockWireless, passwordLocked, authorizeOnlyEnterprise to turn on.
minAccountAgeEnterprise to set above 0.
additionalPullServersOwner only and Business or Enterprise.
Firewall shortcut objectsSERVER_FIREWALL API key permission. Same plan rules as the firewall endpoints: Premium for rules and Enterprise for passwords.
autoAddMember, additionalPullServersRequire 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."
}

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).

Return the server's tracking links with verified-member counts and shareable URLs.

GET /api/v3/servers/{serverId}/verification-links

Prop

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 a tracking link. The code is always generated by RestoreCord.

POST /api/v3/servers/{serverId}/verification-links

Prop

Type

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 link query 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 returns 403 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/codeWhen it appears
200Successful read, update, or delete response.
201Server created.
400 MISSING_FIELDRequired create field missing.
400 INVALID_INPUT / VALIDATION_ERRORBad Discord id, server name, URL, role mode, OAuth payload, or update schema.
401 UNAUTHORIZEDMissing, invalid, revoked, or expired API key.
403 FORBIDDEN / INSUFFICIENT_PERMISSIONSMissing API key permission, missing sub-user permission, owner-only field mutation, plan-gated field, or Discord permission failure.
404 NOT_FOUNDServer, bot, or tracking link not found or inaccessible.
409 DUPLICATE_RESOURCEDuplicate server name, guild id, or role id.
409 RESOURCE_IN_USEDeleting a server with active migrations.
429 RATE_LIMITEDEndpoint rate limit exceeded.
  • Use internal RestoreCord server ids in {serverId} path params; use guildId only 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.

On this page