{
  "version": 1,
  "generatedAt": "2026-06-10T20:14:15Z",
  "connection": {
    "endpoint": "/custom/api/v1/ws",
    "protocol": "websocket",
    "serialization": "msgpack",
    "auth": {
      "type": "header",
      "header": "x-api-key",
      "description": "Your API key from the Custom Connections page. Send as x-api-key header or ?key=API_KEY query parameter when headers are unavailable."
    }
  },
  "packets": {
    "clientToServer": [
      {
        "id": 2,
        "name": "PING",
        "structName": "CustomPing",
        "description": "Ping the server to check connection health",
        "fields": [
          {
            "name": "Version",
            "type": "uint8",
            "required": true,
            "description": "Protocol version, always 1"
          },
          {
            "name": "PacketID",
            "type": "uint8",
            "required": true,
            "description": "Packet type identifier"
          }
        ]
      },
      {
        "id": 21,
        "name": "MESSAGE_CREATE",
        "structName": "CustomMessageCreate",
        "description": "Send a chat message to Discord",
        "fields": [
          {
            "name": "Version",
            "type": "uint8",
            "required": true,
            "description": "Protocol version, always 1"
          },
          {
            "name": "PacketID",
            "type": "uint8",
            "required": true,
            "description": "Packet type identifier"
          },
          {
            "name": "ID",
            "type": "string",
            "required": true,
            "description": "Unique message ID (use timestamp or UUID) (optional)"
          },
          {
            "name": "Username",
            "type": "string",
            "required": true,
            "description": "Display name of the sender (cannot contain 'discord' - will be replaced with 'dscrd')"
          },
          {
            "name": "Content",
            "type": "string",
            "required": true,
            "description": "Message text content"
          },
          {
            "name": "Timestamp",
            "type": "int64",
            "required": true,
            "description": "Unix timestamp when message was sent"
          },
          {
            "name": "AvatarURL",
            "type": "string",
            "required": true,
            "description": "URL to sender's avatar image"
          },
          {
            "name": "ReferenceID",
            "type": "string",
            "required": false,
            "description": "ID of the message being replied to (optional)"
          },
          {
            "name": "ReferenceUsername",
            "type": "string",
            "required": false,
            "description": "Username of the referenced message author (optional)"
          },
          {
            "name": "ReferenceUserID",
            "type": "string",
            "required": false,
            "description": "User ID of the referenced message author (optional)"
          },
          {
            "name": "ReferenceContent",
            "type": "string",
            "required": false,
            "description": "Content preview of the referenced message (optional)"
          },
          {
            "name": "DiscordGuildID",
            "type": "string",
            "required": false,
            "description": "Discord guild/server ID (set when receiving from Discord)"
          },
          {
            "name": "DiscordChannelID",
            "type": "string",
            "required": false,
            "description": "Discord channel ID (set when receiving from Discord)"
          },
          {
            "name": "DiscordUserID",
            "type": "string",
            "required": false,
            "description": "Discord user ID (set when receiving from Discord)"
          },
          {
            "name": "FallbackNameFormat",
            "type": "string",
            "required": false,
            "description": "Format string for name in fallback bot message (must contain %s, default: **__%s__**: )"
          },
          {
            "name": "FallbackContentFormat",
            "type": "string",
            "required": false,
            "description": "Format string for content in fallback bot message (must contain %s, default uses code blocks)"
          },
          {
            "name": "SkipAI",
            "type": "bool",
            "required": false,
            "description": "If true, skip this message in AI analysis (optional). Recommended for non-user-generated messages like system notifications."
          }
        ]
      },
      {
        "id": 22,
        "name": "MESSAGE_EDIT",
        "structName": "CustomMessageEdit",
        "description": "Edit an existing Discord message",
        "fields": [
          {
            "name": "Version",
            "type": "uint8",
            "required": true,
            "description": "Protocol version, always 1"
          },
          {
            "name": "PacketID",
            "type": "uint8",
            "required": true,
            "description": "Packet type identifier"
          },
          {
            "name": "MessageID",
            "type": "string",
            "required": true,
            "description": "ID of the Discord message to edit"
          },
          {
            "name": "ChannelID",
            "type": "string",
            "required": true,
            "description": "ID of the Discord channel containing the message"
          },
          {
            "name": "Content",
            "type": "string",
            "required": true,
            "description": "New message content"
          },
          {
            "name": "GuildID",
            "type": "string",
            "required": false,
            "description": "Discord guild ID (optional, uses first connected guild if not provided)"
          }
        ]
      },
      {
        "id": 23,
        "name": "MESSAGE_DELETE",
        "structName": "CustomMessageDelete",
        "description": "Delete a Discord message",
        "fields": [
          {
            "name": "Version",
            "type": "uint8",
            "required": true,
            "description": "Protocol version, always 1"
          },
          {
            "name": "PacketID",
            "type": "uint8",
            "required": true,
            "description": "Packet type identifier"
          },
          {
            "name": "MessageID",
            "type": "string",
            "required": true,
            "description": "ID of the Discord message to delete"
          },
          {
            "name": "ChannelID",
            "type": "string",
            "required": true,
            "description": "ID of the Discord channel containing the message"
          },
          {
            "name": "GuildID",
            "type": "string",
            "required": false,
            "description": "Discord guild ID (optional)"
          }
        ]
      },
      {
        "id": 25,
        "name": "MESSAGE_REACTION_CREATE",
        "structName": "CustomReactionCreate",
        "description": "Add a reaction to a Discord message",
        "fields": [
          {
            "name": "Version",
            "type": "uint8",
            "required": true,
            "description": "Protocol version, always 1"
          },
          {
            "name": "PacketID",
            "type": "uint8",
            "required": true,
            "description": "Packet type identifier"
          },
          {
            "name": "MessageID",
            "type": "string",
            "required": true,
            "description": "ID of the Discord message to react to"
          },
          {
            "name": "ChannelID",
            "type": "string",
            "required": true,
            "description": "ID of the Discord channel containing the message"
          },
          {
            "name": "Emoji",
            "type": "string",
            "required": true,
            "description": "Emoji to add (unicode emoji or custom emoji format)"
          },
          {
            "name": "GuildID",
            "type": "string",
            "required": false,
            "description": "Discord guild ID (optional)"
          }
        ]
      },
      {
        "id": 26,
        "name": "MESSAGE_REACTION_DELETE",
        "structName": "CustomReactionDelete",
        "description": "Remove a reaction from a Discord message",
        "fields": [
          {
            "name": "Version",
            "type": "uint8",
            "required": true,
            "description": "Protocol version, always 1"
          },
          {
            "name": "PacketID",
            "type": "uint8",
            "required": true,
            "description": "Packet type identifier"
          },
          {
            "name": "MessageID",
            "type": "string",
            "required": true,
            "description": "ID of the Discord message"
          },
          {
            "name": "ChannelID",
            "type": "string",
            "required": true,
            "description": "ID of the Discord channel containing the message"
          },
          {
            "name": "Emoji",
            "type": "string",
            "required": true,
            "description": "Emoji to remove"
          },
          {
            "name": "UserID",
            "type": "string",
            "required": true,
            "description": "Discord user ID whose reaction to remove (use @me for bot's own reaction)"
          },
          {
            "name": "GuildID",
            "type": "string",
            "required": false,
            "description": "Discord guild ID (optional)"
          }
        ]
      },
      {
        "id": 31,
        "name": "DISCORD_USER_DM",
        "structName": "CustomUserDM",
        "description": "Send a direct message to a Discord user",
        "fields": [
          {
            "name": "Version",
            "type": "uint8",
            "required": true,
            "description": "Protocol version, always 1"
          },
          {
            "name": "PacketID",
            "type": "uint8",
            "required": true,
            "description": "Packet type identifier"
          },
          {
            "name": "DiscordUserID",
            "type": "string",
            "required": true,
            "description": "Discord user ID to send the DM to"
          },
          {
            "name": "Content",
            "type": "string",
            "required": true,
            "description": "Message content"
          }
        ]
      },
      {
        "id": 32,
        "name": "DISCORD_USER_ROLE_ASSIGN",
        "structName": "CustomRoleAssign",
        "description": "Assign a role to a Discord user",
        "fields": [
          {
            "name": "Version",
            "type": "uint8",
            "required": true,
            "description": "Protocol version, always 1"
          },
          {
            "name": "PacketID",
            "type": "uint8",
            "required": true,
            "description": "Packet type identifier"
          },
          {
            "name": "UserID",
            "type": "string",
            "required": true,
            "description": "Discord user ID"
          },
          {
            "name": "RoleID",
            "type": "string",
            "required": true,
            "description": "Discord role ID to assign"
          },
          {
            "name": "GuildID",
            "type": "string",
            "required": false,
            "description": "Discord guild ID (optional)"
          }
        ]
      },
      {
        "id": 33,
        "name": "DISCORD_USER_ROLE_REMOVE",
        "structName": "CustomRoleRemove",
        "description": "Remove a role from a Discord user",
        "fields": [
          {
            "name": "Version",
            "type": "uint8",
            "required": true,
            "description": "Protocol version, always 1"
          },
          {
            "name": "PacketID",
            "type": "uint8",
            "required": true,
            "description": "Packet type identifier"
          },
          {
            "name": "UserID",
            "type": "string",
            "required": true,
            "description": "Discord user ID"
          },
          {
            "name": "RoleID",
            "type": "string",
            "required": true,
            "description": "Discord role ID to remove"
          },
          {
            "name": "GuildID",
            "type": "string",
            "required": false,
            "description": "Discord guild ID (optional)"
          }
        ]
      },
      {
        "id": 34,
        "name": "DISCORD_IMAGE_UPLOAD",
        "structName": "CustomImageUpload",
        "description": "Upload an image to a Discord channel",
        "fields": [
          {
            "name": "Version",
            "type": "uint8",
            "required": true,
            "description": "Protocol version, always 1"
          },
          {
            "name": "PacketID",
            "type": "uint8",
            "required": true,
            "description": "Packet type identifier"
          },
          {
            "name": "ChannelID",
            "type": "string",
            "required": true,
            "description": "Discord channel ID to upload the image to"
          },
          {
            "name": "ImageData",
            "type": "[]uint8",
            "required": true,
            "description": "Raw image bytes"
          },
          {
            "name": "Filename",
            "type": "string",
            "required": true,
            "description": "Filename with extension (e.g., screenshot.png)"
          },
          {
            "name": "GuildID",
            "type": "string",
            "required": false,
            "description": "Discord guild ID (optional)"
          }
        ]
      },
      {
        "id": 28,
        "name": "DISCORD_GUILD_ROLES",
        "structName": "CustomGetGuildRoles",
        "description": "Request all roles for a Discord guild",
        "fields": [
          {
            "name": "Version",
            "type": "uint8",
            "required": true,
            "description": "Protocol version, always 1"
          },
          {
            "name": "PacketID",
            "type": "uint8",
            "required": true,
            "description": "Packet type identifier"
          },
          {
            "name": "GuildID",
            "type": "string",
            "required": false,
            "description": "Discord guild ID (optional, uses first connected guild if not provided)"
          }
        ]
      }
    ],
    "serverToClient": [
      {
        "id": 2,
        "name": "PING",
        "structName": "CustomPing",
        "description": "Response to a ping request (server echoes the ping back)",
        "fields": [
          {
            "name": "Version",
            "type": "uint8",
            "required": true,
            "description": "Protocol version, always 1"
          },
          {
            "name": "PacketID",
            "type": "uint8",
            "required": true,
            "description": "Packet type identifier"
          }
        ]
      },
      {
        "id": 0,
        "name": "ERROR",
        "structName": "ErrorPacket",
        "description": "Error response from the server",
        "fields": [
          {
            "name": "Version",
            "type": "uint8",
            "required": true,
            "description": "Protocol version, always 1"
          },
          {
            "name": "PacketID",
            "type": "uint8",
            "required": true,
            "description": "Packet type identifier"
          },
          {
            "name": "Error",
            "type": "string",
            "required": true,
            "description": "Error message describing what went wrong"
          }
        ]
      },
      {
        "id": 21,
        "name": "MESSAGE_CREATE",
        "structName": "CustomMessageCreate",
        "description": "Receive a chat message from Discord",
        "fields": [
          {
            "name": "Version",
            "type": "uint8",
            "required": true,
            "description": "Protocol version, always 1"
          },
          {
            "name": "PacketID",
            "type": "uint8",
            "required": true,
            "description": "Packet type identifier"
          },
          {
            "name": "ID",
            "type": "string",
            "required": true,
            "description": "Unique message ID (use timestamp or UUID) (optional)"
          },
          {
            "name": "Username",
            "type": "string",
            "required": true,
            "description": "Display name of the sender (cannot contain 'discord' - will be replaced with 'dscrd')"
          },
          {
            "name": "Content",
            "type": "string",
            "required": true,
            "description": "Message text content"
          },
          {
            "name": "Timestamp",
            "type": "int64",
            "required": true,
            "description": "Unix timestamp when message was sent"
          },
          {
            "name": "AvatarURL",
            "type": "string",
            "required": true,
            "description": "URL to sender's avatar image"
          },
          {
            "name": "ReferenceID",
            "type": "string",
            "required": false,
            "description": "ID of the message being replied to (optional)"
          },
          {
            "name": "ReferenceUsername",
            "type": "string",
            "required": false,
            "description": "Username of the referenced message author (optional)"
          },
          {
            "name": "ReferenceUserID",
            "type": "string",
            "required": false,
            "description": "User ID of the referenced message author (optional)"
          },
          {
            "name": "ReferenceContent",
            "type": "string",
            "required": false,
            "description": "Content preview of the referenced message (optional)"
          },
          {
            "name": "DiscordGuildID",
            "type": "string",
            "required": false,
            "description": "Discord guild/server ID (set when receiving from Discord)"
          },
          {
            "name": "DiscordChannelID",
            "type": "string",
            "required": false,
            "description": "Discord channel ID (set when receiving from Discord)"
          },
          {
            "name": "DiscordUserID",
            "type": "string",
            "required": false,
            "description": "Discord user ID (set when receiving from Discord)"
          },
          {
            "name": "FallbackNameFormat",
            "type": "string",
            "required": false,
            "description": "Format string for name in fallback bot message (must contain %s, default: **__%s__**: )"
          },
          {
            "name": "FallbackContentFormat",
            "type": "string",
            "required": false,
            "description": "Format string for content in fallback bot message (must contain %s, default uses code blocks)"
          },
          {
            "name": "SkipAI",
            "type": "bool",
            "required": false,
            "description": "If true, skip this message in AI analysis (optional). Recommended for non-user-generated messages like system notifications."
          }
        ]
      },
      {
        "id": 28,
        "name": "DISCORD_GUILD_ROLES",
        "structName": "CustomGuildRolesResponse",
        "description": "Response containing guild roles",
        "fields": [
          {
            "name": "Version",
            "type": "uint8",
            "required": true,
            "description": "Protocol version, always 1"
          },
          {
            "name": "PacketID",
            "type": "uint8",
            "required": true,
            "description": "Packet type identifier"
          },
          {
            "name": "GuildID",
            "type": "string",
            "required": true,
            "description": "Discord guild ID"
          },
          {
            "name": "Roles",
            "type": "[]CustomRole",
            "required": true,
            "description": "List of roles in the guild"
          }
        ]
      },
      {
        "id": 25,
        "name": "MESSAGE_REACTION_CREATE",
        "structName": "CustomReactionAdded",
        "description": "Receive a reaction add event from Discord",
        "fields": [
          {
            "name": "Version",
            "type": "uint8",
            "required": true,
            "description": "Protocol version, always 1"
          },
          {
            "name": "PacketID",
            "type": "uint8",
            "required": true,
            "description": "Packet type identifier"
          },
          {
            "name": "MessageID",
            "type": "string",
            "required": true,
            "description": "ID of the Discord message that was reacted to"
          },
          {
            "name": "ChannelID",
            "type": "string",
            "required": true,
            "description": "ID of the Discord channel containing the message"
          },
          {
            "name": "Emoji",
            "type": "string",
            "required": true,
            "description": "Emoji that was added"
          },
          {
            "name": "GuildID",
            "type": "string",
            "required": true,
            "description": "Discord guild ID"
          },
          {
            "name": "UserID",
            "type": "string",
            "required": true,
            "description": "Discord user ID of the user who added the reaction"
          },
          {
            "name": "Username",
            "type": "string",
            "required": true,
            "description": "Display name of the user who added the reaction"
          },
          {
            "name": "AvatarURL",
            "type": "string",
            "required": true,
            "description": "URL to the user's avatar image"
          },
          {
            "name": "ReferenceUserID",
            "type": "string",
            "required": true,
            "description": "ID of the user who authored the reacted message"
          },
          {
            "name": "ReferenceUsername",
            "type": "string",
            "required": true,
            "description": "Display name of the user who authored the reacted message"
          }
        ]
      },
      {
        "id": 26,
        "name": "MESSAGE_REACTION_DELETE",
        "structName": "CustomReactionRemoved",
        "description": "Receive a reaction remove event from Discord",
        "fields": [
          {
            "name": "Version",
            "type": "uint8",
            "required": true,
            "description": "Protocol version, always 1"
          },
          {
            "name": "PacketID",
            "type": "uint8",
            "required": true,
            "description": "Packet type identifier"
          },
          {
            "name": "MessageID",
            "type": "string",
            "required": true,
            "description": "ID of the Discord message that had a reaction removed"
          },
          {
            "name": "ChannelID",
            "type": "string",
            "required": true,
            "description": "ID of the Discord channel containing the message"
          },
          {
            "name": "Emoji",
            "type": "string",
            "required": true,
            "description": "Emoji that was removed"
          },
          {
            "name": "GuildID",
            "type": "string",
            "required": true,
            "description": "Discord guild ID"
          },
          {
            "name": "UserID",
            "type": "string",
            "required": true,
            "description": "Discord user ID of the user who removed the reaction"
          },
          {
            "name": "Username",
            "type": "string",
            "required": true,
            "description": "Display name of the user who removed the reaction"
          },
          {
            "name": "AvatarURL",
            "type": "string",
            "required": true,
            "description": "URL to the user's avatar image"
          },
          {
            "name": "ReferenceUserID",
            "type": "string",
            "required": true,
            "description": "ID of the user who authored the reacted message"
          },
          {
            "name": "ReferenceUsername",
            "type": "string",
            "required": true,
            "description": "Display name of the user who authored the reacted message"
          }
        ]
      }
    ]
  },
  "types": {
    "CustomRole": {
      "name": "CustomRole",
      "description": "CustomRole",
      "fields": [
        {
          "name": "ID",
          "type": "string",
          "required": true,
          "description": "Discord role ID"
        },
        {
          "name": "Name",
          "type": "string",
          "required": true,
          "description": "Role name"
        },
        {
          "name": "Color",
          "type": "int",
          "required": true,
          "description": "Role color as integer"
        }
      ]
    }
  }
}
