API Reference

Members

Member API for RestoreCord: list and look up verified Discord members, pull one member into a server, delete members and clean up unauthorized members.

Overview

Member endpoints expose verified member records, single-member pull operations, and unauthorized cleanup. Server path params use internal RestoreCord server IDs; list and unauthorized routes also accept all.

EndpointPurposePermission
GET /api/v3/servers/{serverId}/membersPaginated member list for one server or all accessible servers.READ_MEMBERS
GET|DELETE /api/v3/servers/{serverId}/members/unauthorizedCount or delete unauthorized members.READ_MEMBERS for GET, WRITE_MEMBERS for DELETE
GET /api/v3/members/{userId}Find a Discord user across servers owned by the API key's account.READ_MEMBERS
GET /api/v3/members/resolve/{memberId}Resolve one member record ID on a server owned by the API key's account.READ_MEMBERS
PUT /api/v3/servers/{serverId}/members/{userId}Pull one member into a Discord server.SERVER_PULL
DELETE /api/v3/servers/{serverId}/members/{userId}Delete one member record and remove role best-effort.WRITE_MEMBERS; owner only
GET /api/v3/members/{userId}/guildsReturn the member's Discord servers (needs the guilds scope).READ_MEMBERS; Business+

Member data may include personal data. Personal details such as IP address, email and location are gated by plan and permission.

List Members

Returns member summaries, counts, pagination, and pullable/unauthorized totals.

GET /api/v3/servers/{serverId}/members

Prop

Type

{
  "success": true,
  "members": [
    {
      "id": 987,
      "serverId": "42",
      "userId": "123456789012345678",
      "username": "alice#0000",
      "avatar": "avatar-hash",
      "country": "US",
      "createdAt": "2026-06-07T10:30:00.000Z",
      "guildId": "111111111111111111",
      "guildName": "Community",
      "unauthorized": false
    }
  ],
  "total": 1,
  "pullable": 1,
  "unauthorized": 0,
  "currentPage": 1,
  "maxPages": 1
}
  • Very deep pagination is rejected; use filters to narrow results.
  • For serverId=all, servers shared with the API key's account are included only when that account has the VIEW_MEMBERS sub-user permission.
  • IP and email searches follow the same rules as the member details: the server owner's plan must be Premium or higher for IP and Business or higher for email, and on shared servers the account needs the View Member Details sub-user permission. For serverId=all, servers that don't meet these rules are left out of the results. If no server meets them, the request returns 403 INSUFFICIENT_PERMISSIONS.
  • Country filters must be a supported two-letter ISO country code.

Unauthorized Members

Unauthorized members removed your bot from their Discord account, so they can no longer be pulled until they verify again.

Count unauthorized members

Returns unauthorized member counts for one server or all accessible servers.

GET /api/v3/servers/{serverId}/members/unauthorized

Prop

Type

{
  "success": true,
  "count": 12,
  "serverId": "all",
  "breakdown": [
    { "serverId": "42", "guildId": "111111111111111111", "serverName": "Community", "count": 12 }
  ]
}

Delete unauthorized members

Deletes unauthorized member records. Use dryRun to preview counts first.

DELETE /api/v3/servers/{serverId}/members/unauthorized

Prop

Type

{
  "success": true,
  "dryRun": true,
  "wouldRemove": 12,
  "message": "Dry run: Would remove 12 unauthorized members."
}
{
  "success": true,
  "removed": 12,
  "message": "Successfully removed 12 unauthorized members.",
  "serverId": "42"
}

Lookup Member

Returns one entry per server owned by the API key's account that contains the Discord user. Servers shared with the account through sub-user access are not searched for API keys. Not-found lookups return servers: [].

GET /api/v3/members/{userId}

Prop

Type

{
  "success": true,
  "servers": [
    {
      "serverId": 42,
      "guildId": "111111111111111111",
      "serverName": "Community",
      "hasFullAccess": true,
      "member": {
        "id": 987,
        "userId": "123456789012345678",
        "username": "alice#0000",
        "avatar": "avatar-hash",
        "joinedAt": "2026-06-07T10:30:00.000Z",
        "country": "US",
        "unauthorized": false,
        "ip": "203.0.113.***",
        "location": { "country": "United States", "vpn": false }
      }
    }
  ]
}

Resolve Member

Returns one server/member entry for a member record ID (member.id). API keys can only resolve members of servers owned by the key's account; other members return 404.

GET /api/v3/members/resolve/{memberId}

Prop

Type

{
  "success": true,
  "server": {
    "serverId": 42,
    "guildId": "111111111111111111",
    "serverName": "Community",
    "hasFullAccess": true,
    "member": {
      "id": 987,
      "serverId": "42",
      "userId": "123456789012345678",
      "username": "alice#0000",
      "unauthorized": false
    }
  }
}

Pull Member

Auth: API key with SERVER_PULL. The key's account must own the server, or have the pull_members and view_members sub-user permissions on it. The response is text/event-stream, not JSON. Invalid IDs and a missing permission bit return a JSON error; every other failure (server access, member not found, unauthorized member, bot, guild or Discord errors) arrives as an error event in a 200 stream. See Pull One Member for every message.

Pulls one stored member into a target Discord guild and streams progress events.

PUT /api/v3/servers/{serverId}/members/{userId}

Prop

Type

Example SSE response
event: info
data: {"time":1780837800000,"success":true,"message":"Started Pulling..."}

event: info
data: {"time":1780837801000,"success":true,"message":"Successfully Pulled"}

SSE Events

EventPayload fieldsNotes
infotime, success, messageProgress and successful Discord add-member states.
errortime, success: false, messageValidation, access, Discord token, guild, invite-disabled, or rate-limit failures.

Delete Member

Auth: API key with WRITE_MEMBERS. The key's account must own the server; sub-user access is not accepted.

Deletes one member record and removes the verified role best-effort through Discord.

DELETE /api/v3/servers/{serverId}/members/{userId}

Prop

Type

{
  "success": true,
  "message": "Member removed from server."
}

Member Guilds

Returns the member's Discord servers. Auth: API key with READ_MEMBERS. Requires a valid serverId query, VIEW_MEMBERS access to that server, a Business or Enterprise server owner plan, and the guilds scope enabled for the server.

GET /api/v3/members/{userId}/guilds

Prop

Type

{
  "success": true,
  "guilds": [
    { "id": "999999999999999999", "name": "Other Guild", "icon": null }
  ],
  "cached": false
}

Status and Errors

Status/codeWhen it appears
200Successful member list, lookup, count, delete, guild lookup, or stream start.
400 INVALID_INPUTInvalid server ID, user ID, member ID, country code, search value, or page depth.
401 UNAUTHORIZEDMissing auth.
403 FORBIDDEN / INSUFFICIENT_PERMISSIONSMissing API key permission, the key's account lacks sub-user access to the server, non-owner delete, Business plan required for member guild lookup, or an IP or email search without the required plan or VIEW_MEMBER_INFO.
404 NOT_FOUNDServer, member, bot, or lookup target not found.
429 RATE_LIMITEDRate limit reached for lookup or member guilds. The pull stream reports Discord rate limits as an info event and does not retry; send the request again after the stated wait.
409 MEMBER_GUILDS_SCOPE_REQUIRED / MEMBER_REAUTHORIZATION_REQUIREDMember guilds: the guilds scope is off or wasn't granted, or the member must verify again.
502 EXTERNAL_SERVICE_ERRORDiscord could not be reached or returned an error.
  • Use GET /members/{userId} for Discord-user lookup and GET /members/resolve/{memberId} for member record ID lookup.
  • Use DELETE /members/unauthorized?dryRun=true before destructive cleanup.
  • Handle pull responses as SSE, not JSON.

On this page