Serve Actions

When running discli serve, you send JSON objects (one per line) to stdin. Every action must include an "action" field. An optional "req_id" field will be echoed back in the response for correlation.

General request format:

{"action": "<action_name>", "req_id": "optional-correlation-id", ...fields}

General response format:

{"event": "response", "status": "ok", "req_id": "1", ...result_fields}

On error, the response contains an "error" field instead of "ok":

{"event": "response", "error": "Channel not found: 999", "req_id": "1"}

Messaging

send

Send a message to a channel.

Request:

{"action": "send", "channel_id": "123456", "content": "Hello!", "req_id": "1"}

Response:

{"event": "response", "ok": true, "message_id": "789", "req_id": "1"}
FieldRequiredTypeDescription
channel_idyesstringTarget channel ID
contentnostringMessage text
embednoobjectEmbed object (see Embeds)
componentsnoarrayMessage components (see Components)
filesnostring[]Local file paths to attach
req_idnostringCorrelation ID

reply

Reply to a specific message.

Request:

{"action": "reply", "channel_id": "123456", "message_id": "111", "content": "Got it!", "req_id": "2"}

Response:

{"event": "response", "ok": true, "message_id": "222", "req_id": "2"}
FieldRequiredTypeDescription
channel_idyesstringChannel containing the message
message_idyesstringMessage to reply to
contentnostringReply text
embednoobjectEmbed object (see Embeds)
componentsnoarrayMessage components (see Components)
filesnostring[]Local file paths to attach
req_idnostringCorrelation ID

edit

Edit an existing message (must be authored by the bot).

Request:

{"action": "edit", "channel_id": "123456", "message_id": "789", "content": "Updated text", "req_id": "3"}

Response:

{"event": "response", "ok": true, "req_id": "3"}
FieldRequiredTypeDescription
channel_idyesstringChannel containing the message
message_idyesstringMessage to edit
contentnostringNew message content
req_idnostringCorrelation ID

delete

Delete a message.

Request:

{"action": "delete", "channel_id": "123456", "message_id": "789", "req_id": "4"}

Response:

{"event": "response", "ok": true, "req_id": "4"}
FieldRequiredTypeDescription
channel_idyesstringChannel containing the message
message_idyesstringMessage to delete
req_idnostringCorrelation ID

message_pin

Pin a message in a channel.

Request:

{"action": "message_pin", "channel_id": "123456", "message_id": "789", "req_id": "5"}

Response:

{"event": "response", "ok": true, "req_id": "5"}
FieldRequiredTypeDescription
channel_idyesstringChannel containing the message
message_idyesstringMessage to pin
req_idnostringCorrelation ID

message_unpin

Unpin a message in a channel.

Request:

{"action": "message_unpin", "channel_id": "123456", "message_id": "789", "req_id": "6"}

Response:

{"event": "response", "ok": true, "req_id": "6"}
FieldRequiredTypeDescription
channel_idyesstringChannel containing the message
message_idyesstringMessage to unpin
req_idnostringCorrelation ID

message_bulk_delete

Delete multiple messages at once.

Request:

{"action": "message_bulk_delete", "channel_id": "123456", "message_ids": ["789", "790"], "req_id": "7"}

Response:

{"event": "response", "ok": true, "req_id": "7"}
FieldRequiredTypeDescription
channel_idyesstringChannel containing the messages
message_idsyesstring[]Message IDs to delete
req_idnostringCorrelation ID

Embeds in send / reply

The embed field in send and reply accepts an object with the following structure:

{
"action": "send",
"channel_id": "123456",
"content": "Check this out",
"embed": {
"title": "My Embed",
"description": "A description",
"color": "5865F2",
"footer": "Footer text",
"image": "https://example.com/image.png",
"thumbnail": "https://example.com/thumb.png",
"author": {"name": "Author Name", "icon_url": "https://example.com/icon.png"},
"fields": [{"name": "Field", "value": "Value", "inline": true}]
}
}
FieldRequiredTypeDescription
titlenostringEmbed title
descriptionnostringEmbed description
colornostringHex color (e.g. 5865F2)
footernostringFooter text
imagenostringImage URL
thumbnailnostringThumbnail URL
authornoobjectAuthor with name and optional icon_url
fieldsnoarrayList of {"name", "value", "inline"} objects

Components in send / reply

The components field in send and reply accepts an array of action rows. Each action row is an array of component objects.

{
"action": "send",
"channel_id": "123456",
"content": "Pick an option",
"components": [
[{"type": "button", "label": "OK", "style": "primary", "custom_id": "ok"}],
[{"type": "select", "custom_id": "pick", "placeholder": "Choose...", "options": [{"label": "A", "value": "a"}]}],
[{"type": "user_select", "custom_id": "user", "placeholder": "Pick user..."}],
[{"type": "role_select", "custom_id": "role", "placeholder": "Pick role..."}],
[{"type": "channel_select", "custom_id": "ch", "placeholder": "Pick channel..."}]
]
}

Supported component types:

TypeFieldsDescription
buttonlabel, style, custom_idButton. Styles: primary, secondary, success, danger
selectcustom_id, placeholder, optionsString select menu. Options: [{"label", "value"}]
user_selectcustom_id, placeholderUser select menu
role_selectcustom_id, placeholderRole select menu
channel_selectcustom_id, placeholderChannel select menu

Streaming

Streaming lets you send a response that updates in real-time (e.g., token-by-token LLM output). The flow is: stream_start to create a placeholder message, stream_chunk to append text, and stream_end to finalize. The message is flushed to Discord every 1.5 seconds during streaming.

stream_start

Start a streaming message. Creates a placeholder message ("...") in the channel.

Request:

{"action": "stream_start", "channel_id": "123456", "req_id": "10"}

Response:

{"event": "response", "stream_id": "a1b2c3d4", "message_id": "789", "req_id": "10"}
FieldRequiredTypeDescription
channel_idyesstringChannel to send in
reply_tonostringMessage ID to reply to
interaction_tokennostringInteraction token to respond to a slash command
req_idnostringCorrelation ID

stream_chunk

Append text to an active stream. Content is buffered and flushed periodically.

Request:

{"action": "stream_chunk", "stream_id": "a1b2c3d4", "content": "Hello ", "req_id": "11"}

Response:

{"event": "response", "ok": true, "req_id": "11"}
FieldRequiredTypeDescription
stream_idyesstringStream ID from stream_start
contentnostringText to append
req_idnostringCorrelation ID

stream_end

Finalize a streaming message. Performs a final edit with the complete content. If the content exceeds 2000 characters, overflow is split into follow-up messages.

Request:

{"action": "stream_end", "stream_id": "a1b2c3d4", "req_id": "12"}

Response:

{"event": "response", "ok": true, "message_id": "789", "req_id": "12"}
FieldRequiredTypeDescription
stream_idyesstringStream ID from stream_start
req_idnostringCorrelation ID

Interactions

interaction_followup

Send a follow-up response to a deferred slash command interaction.

Request:

{"action": "interaction_followup", "interaction_token": "uuid-token", "content": "Done!", "req_id": "20"}

Response:

{"event": "response", "ok": true, "req_id": "20"}
FieldRequiredTypeDescription
interaction_tokenyesstringToken from the slash_command event
contentnostringFollow-up message text
req_idnostringCorrelation ID

interaction_respond

Send an immediate response to an interaction. Use this instead of interaction_followup when the interaction has not been deferred.

Request:

{"action": "interaction_respond", "interaction_token": "uuid-token", "content": "Done!", "ephemeral": true, "req_id": "21"}

Response:

{"event": "response", "ok": true, "req_id": "21"}
FieldRequiredTypeDescription
interaction_tokenyesstringToken from the interaction event
contentnostringResponse message text
embednoobjectEmbed object
componentsnoarrayMessage components
ephemeralnobooleanOnly visible to the invoking user (default: false)
req_idnostringCorrelation ID

interaction_edit

Edit the original interaction response message.

Request:

{"action": "interaction_edit", "interaction_token": "uuid-token", "content": "Updated!", "req_id": "22"}

Response:

{"event": "response", "ok": true, "req_id": "22"}
FieldRequiredTypeDescription
interaction_tokenyesstringToken from the interaction event
contentnostringNew message content
embednoobjectNew embed object
componentsnoarrayNew message components
req_idnostringCorrelation ID

Open a modal form in response to an interaction.

Request:

{
"action": "modal_send",
"interaction_token": "uuid-token",
"custom_id": "feedback-form",
"title": "Feedback",
"fields": [
{"custom_id": "name", "label": "Name", "style": "short", "required": true},
{"custom_id": "message", "label": "Message", "style": "long", "placeholder": "Your feedback..."}
],
"req_id": "23"
}

Response:

{"event": "response", "ok": true, "req_id": "23"}
FieldRequiredTypeDescription
interaction_tokenyesstringToken from the interaction event
custom_idyesstringUnique identifier for the modal
titleyesstringModal title
fieldsyesarrayList of text input fields
req_idnostringCorrelation ID

Field object:

FieldRequiredTypeDescription
custom_idyesstringUnique identifier for the field
labelyesstringField label
styleyesstringshort (single line) or long (paragraph)
requirednobooleanWhether the field is required (default: true)
placeholdernostringPlaceholder text
valuenostringPre-filled value

Typing / Presence

typing_start

Start showing a typing indicator in a channel. The indicator persists until typing_stop is sent or the bot sends a message.

Request:

{"action": "typing_start", "channel_id": "123456", "req_id": "30"}

Response:

{"event": "response", "ok": true, "req_id": "30"}
FieldRequiredTypeDescription
channel_idyesstringChannel ID
req_idnostringCorrelation ID

typing_stop

Stop the typing indicator in a channel.

Request:

{"action": "typing_stop", "channel_id": "123456", "req_id": "31"}

Response:

{"event": "response", "ok": true, "req_id": "31"}
FieldRequiredTypeDescription
channel_idyesstringChannel ID
req_idnostringCorrelation ID

presence

Set the bot’s online status and activity.

Request:

{"action": "presence", "status": "dnd", "activity_type": "watching", "activity_text": "the logs", "req_id": "32"}

Response:

{"event": "response", "ok": true, "req_id": "32"}
FieldRequiredTypeDescription
statusnostringonline, idle, dnd, or invisible (default: online)
activity_typenostringplaying, watching, listening, or competing
activity_textnostringActivity display text
req_idnostringCorrelation ID

Reactions

reaction_add

Add a reaction to a message.

Request:

{"action": "reaction_add", "channel_id": "123456", "message_id": "789", "emoji": "thumbsup", "req_id": "40"}

Response:

{"event": "response", "ok": true, "req_id": "40"}
FieldRequiredTypeDescription
channel_idyesstringChannel containing the message
message_idyesstringMessage to react to
emojiyesstringEmoji character or custom emoji string
req_idnostringCorrelation ID

reaction_remove

Remove the bot’s reaction from a message.

Request:

{"action": "reaction_remove", "channel_id": "123456", "message_id": "789", "emoji": "thumbsup", "req_id": "41"}

Response:

{"event": "response", "ok": true, "req_id": "41"}
FieldRequiredTypeDescription
channel_idyesstringChannel containing the message
message_idyesstringMessage to remove reaction from
emojiyesstringEmoji character or custom emoji string
req_idnostringCorrelation ID

reaction_users

List users who reacted with a specific emoji.

Request:

{"action": "reaction_users", "channel_id": "123456", "message_id": "789", "emoji": "thumbsup", "limit": 100, "req_id": "42"}

Response:

{
"event": "response",
"ok": true,
"users": [
{"id": "111", "name": "alice"}
],
"req_id": "42"
}
FieldRequiredTypeDescription
channel_idyesstringChannel containing the message
message_idyesstringMessage ID
emojiyesstringEmoji character or custom emoji string
limitnointegerMax users to return (default: 100)
req_idnostringCorrelation ID

Threads

thread_create

Create a new thread, optionally from an existing message.

Request:

{"action": "thread_create", "channel_id": "123456", "name": "Discussion", "message_id": "789", "req_id": "50"}

Response:

{"event": "response", "ok": true, "thread_id": "999", "thread_name": "Discussion", "req_id": "50"}
FieldRequiredTypeDescription
channel_idyesstringParent channel ID
nameyesstringThread name
message_idnostringMessage to create thread from (omit for standalone thread)
auto_archive_durationnointegerAuto-archive after N minutes (default: 1440)
contentnostringInitial message to send in the thread
req_idnostringCorrelation ID

thread_send

Send a message to an existing thread.

Request:

{"action": "thread_send", "thread_id": "999", "content": "Hello thread!", "req_id": "51"}

Response:

{"event": "response", "ok": true, "message_id": "1000", "req_id": "51"}
FieldRequiredTypeDescription
thread_idyesstringThread ID
contentnostringMessage text
filesnostring[]Local file paths to attach
req_idnostringCorrelation ID

thread_list

List active threads in a channel.

Request:

{"action": "thread_list", "channel_id": "123456", "req_id": "52"}

Response:

{
"event": "response",
"ok": true,
"threads": [
{"id": "999", "name": "Discussion", "message_count": 5, "member_count": 3, "archived": false}
],
"req_id": "52"
}
FieldRequiredTypeDescription
channel_idyesstringChannel ID
req_idnostringCorrelation ID

thread_archive

Archive a thread.

Request:

{"action": "thread_archive", "thread_id": "999", "req_id": "53"}

Response:

{"event": "response", "ok": true, "req_id": "53"}
FieldRequiredTypeDescription
thread_idyesstringThread ID
req_idnostringCorrelation ID

thread_rename

Rename a thread.

Request:

{"action": "thread_rename", "thread_id": "999", "name": "New Name", "req_id": "54"}

Response:

{"event": "response", "ok": true, "req_id": "54"}
FieldRequiredTypeDescription
thread_idyesstringThread ID
nameyesstringNew thread name
req_idnostringCorrelation ID

thread_add_member

Add a member to a thread.

Request:

{"action": "thread_add_member", "thread_id": "999", "member_id": "111", "req_id": "55"}

Response:

{"event": "response", "ok": true, "req_id": "55"}
FieldRequiredTypeDescription
thread_idyesstringThread ID
member_idyesstringMember user ID
req_idnostringCorrelation ID

thread_remove_member

Remove a member from a thread.

Request:

{"action": "thread_remove_member", "thread_id": "999", "member_id": "111", "req_id": "56"}

Response:

{"event": "response", "ok": true, "req_id": "56"}
FieldRequiredTypeDescription
thread_idyesstringThread ID
member_idyesstringMember user ID
req_idnostringCorrelation ID

Polls

poll_send

Create a poll in a channel.

Request:

{
"action": "poll_send",
"channel_id": "123456",
"question": "Favorite AI?",
"answers": ["Claude", "Gemini", "ChatGPT"],
"duration_hours": 24,
"multiple": false,
"req_id": "60"
}

Answers can also be objects with emoji:

{
"action": "poll_send",
"channel_id": "123456",
"question": "Vote!",
"answers": [{"text": "Yes", "emoji": "white_check_mark"}, {"text": "No", "emoji": "x"}],
"req_id": "61"
}

Response:

{"event": "response", "ok": true, "message_id": "789", "req_id": "60"}
FieldRequiredTypeDescription
channel_idyesstringChannel ID
questionyesstringPoll question
answersyesarrayList of answer strings or &#123;"text": "...", "emoji": "..."&#125; objects (min 2)
duration_hoursnointegerDuration in hours (default: 24)
multiplenobooleanAllow multiple selections (default: false)
contentnostringOptional message text alongside the poll
req_idnostringCorrelation ID

poll_results

View the results of a poll.

Request:

{"action": "poll_results", "channel_id": "123456", "message_id": "789", "req_id": "62"}

Response:

{
"event": "response",
"ok": true,
"question": "Favorite AI?",
"answers": [
{"text": "Claude", "votes": 10},
{"text": "Gemini", "votes": 5},
{"text": "ChatGPT", "votes": 3}
],
"req_id": "62"
}
FieldRequiredTypeDescription
channel_idyesstringChannel ID
message_idyesstringMessage ID of the poll
req_idnostringCorrelation ID

poll_end

End a poll early.

Request:

{"action": "poll_end", "channel_id": "123456", "message_id": "789", "req_id": "63"}

Response:

{"event": "response", "ok": true, "req_id": "63"}
FieldRequiredTypeDescription
channel_idyesstringChannel ID
message_idyesstringMessage ID of the poll
req_idnostringCorrelation ID

Channels

channel_list

List channels across all servers or a specific server.

Request:

{"action": "channel_list", "guild_id": "123456", "req_id": "70"}

Response:

{
"event": "response",
"ok": true,
"channels": [
{"id": "111", "name": "general", "type": "text", "server": "My Server", "server_id": "123456"}
],
"req_id": "70"
}
FieldRequiredTypeDescription
guild_idnostringServer ID (omit for all servers)
req_idnostringCorrelation ID

channel_create

Create a channel in a server.

Request:

{"action": "channel_create", "guild_id": "123456", "name": "new-channel", "type": "text", "req_id": "71"}

Response:

{"event": "response", "ok": true, "channel_id": "222", "name": "new-channel", "req_id": "71"}
FieldRequiredTypeDescription
guild_idyesstringServer ID
nameyesstringChannel name
typenostringtext, voice, category, or forum (default: text)
req_idnostringCorrelation ID

channel_info

Get details about a channel.

Request:

{"action": "channel_info", "channel_id": "123456", "req_id": "72"}

Response:

{
"event": "response",
"ok": true,
"id": "123456",
"name": "general",
"type": "text",
"server": "My Server",
"server_id": "789",
"topic": "General discussion",
"created_at": "2024-01-01T00:00:00+00:00",
"req_id": "72"
}
FieldRequiredTypeDescription
channel_idyesstringChannel ID
req_idnostringCorrelation ID

channel_edit

Edit channel settings.

Request:

{"action": "channel_edit", "channel_id": "123456", "name": "new-name", "topic": "New topic", "slowmode": 5, "nsfw": false, "req_id": "73"}

Response:

{"event": "response", "ok": true, "req_id": "73"}
FieldRequiredTypeDescription
channel_idyesstringChannel ID
namenostringNew channel name
topicnostringNew channel topic
slowmodenointegerSlowmode delay in seconds (0 to disable)
nsfwnobooleanNSFW setting
req_idnostringCorrelation ID

channel_set_permissions

Set permission overwrites for a channel.

Request:

{"action": "channel_set_permissions", "channel_id": "123456", "target_id": "222", "target_type": "role", "allow": "send_messages,read_messages", "deny": "manage_messages", "req_id": "74"}

Response:

{"event": "response", "ok": true, "req_id": "74"}
FieldRequiredTypeDescription
channel_idyesstringChannel ID
target_idyesstringRole or member ID
target_typenostringrole or member (default: role)
allownostringComma-separated permissions to allow
denynostringComma-separated permissions to deny
req_idnostringCorrelation ID

forum_post

Create a forum post in a forum channel.

Request:

{"action": "forum_post", "channel_id": "123456", "title": "My Post", "content": "Post body", "req_id": "75"}

Response:

{"event": "response", "ok": true, "thread_id": "999", "req_id": "75"}
FieldRequiredTypeDescription
channel_idyesstringForum channel ID
titleyesstringPost title
contentyesstringPost body content
filesnostring[]Local file paths to attach
req_idnostringCorrelation ID

Members

member_list

List members of a server.

Request:

{"action": "member_list", "guild_id": "123456", "limit": 50, "req_id": "80"}

Response:

{
"event": "response",
"ok": true,
"members": [
{"id": "111", "name": "alice", "nick": null, "bot": false}
],
"req_id": "80"
}
FieldRequiredTypeDescription
guild_idyesstringServer ID
limitnointegerMax members to return (default: 50)
req_idnostringCorrelation ID

member_info

Get details about a specific member.

Request:

{"action": "member_info", "guild_id": "123456", "member_id": "111", "req_id": "81"}

Response:

{
"event": "response",
"ok": true,
"id": "111",
"name": "alice",
"nick": null,
"bot": false,
"roles": [{"id": "222", "name": "Admin"}],
"joined_at": "2024-01-01T00:00:00+00:00",
"req_id": "81"
}
FieldRequiredTypeDescription
guild_idyesstringServer ID
member_idyesstringMember user ID
req_idnostringCorrelation ID

member_timeout

Timeout a member, preventing them from sending messages or joining voice.

Request:

{"action": "member_timeout", "guild_id": "123456", "member_id": "111", "duration": 300, "reason": "Spamming", "req_id": "82"}

Response:

{"event": "response", "ok": true, "req_id": "82"}
FieldRequiredTypeDescription
guild_idyesstringServer ID
member_idyesstringMember user ID
durationyesintegerTimeout duration in seconds (0 to remove timeout)
reasonnostringReason for timeout
req_idnostringCorrelation ID

Roles

role_list

List roles in a server.

Request:

{"action": "role_list", "guild_id": "123456", "req_id": "90"}

Response:

{
"event": "response",
"ok": true,
"roles": [
{"id": "222", "name": "Admin", "color": "#ff0000", "members": 3}
],
"req_id": "90"
}
FieldRequiredTypeDescription
guild_idyesstringServer ID
req_idnostringCorrelation ID

role_assign

Assign a role to a member.

Request:

{"action": "role_assign", "guild_id": "123456", "member_id": "111", "role_id": "222", "req_id": "91"}

Response:

{"event": "response", "ok": true, "member": "alice", "role": "Admin", "req_id": "91"}
FieldRequiredTypeDescription
guild_idyesstringServer ID
member_idyesstringMember user ID
role_idyesstringRole ID to assign
req_idnostringCorrelation ID

role_remove

Remove a role from a member.

Request:

{"action": "role_remove", "guild_id": "123456", "member_id": "111", "role_id": "222", "req_id": "92"}

Response:

{"event": "response", "ok": true, "member": "alice", "role": "Admin", "req_id": "92"}
FieldRequiredTypeDescription
guild_idyesstringServer ID
member_idyesstringMember user ID
role_idyesstringRole ID to remove
req_idnostringCorrelation ID

role_edit

Edit a role’s settings.

Request:

{"action": "role_edit", "guild_id": "123456", "role_id": "222", "name": "Moderator", "color": "00ff00", "hoist": true, "mentionable": false, "req_id": "93"}

Response:

{"event": "response", "ok": true, "req_id": "93"}
FieldRequiredTypeDescription
guild_idyesstringServer ID
role_idyesstringRole ID
namenostringNew role name
colornostringHex color (e.g. 00ff00)
hoistnobooleanDisplay role separately in sidebar
mentionablenobooleanWhether the role can be @-mentioned
req_idnostringCorrelation ID

DMs

dm_send

Send a direct message to a user.

Request:

{"action": "dm_send", "user_id": "111", "content": "Hello!", "req_id": "100"}

Response:

{"event": "response", "ok": true, "message_id": "222", "recipient": "alice", "req_id": "100"}
FieldRequiredTypeDescription
user_idyesstringRecipient user ID
contentnostringMessage text
req_idnostringCorrelation ID

Queries

message_list

List recent messages in a channel.

Request:

{"action": "message_list", "channel_id": "123456", "limit": 20, "req_id": "110"}

Response:

{
"event": "response",
"ok": true,
"messages": [
{
"id": "789",
"author": "alice",
"author_id": "111",
"content": "Hello!",
"timestamp": "2024-01-01T12:00:00+00:00",
"attachments": []
}
],
"req_id": "110"
}
FieldRequiredTypeDescription
channel_idyesstringChannel ID
limitnointegerMax messages (default: 20)
req_idnostringCorrelation ID

message_get

Fetch a single message by ID.

Request:

{"action": "message_get", "channel_id": "123456", "message_id": "789", "req_id": "111"}

Response:

{
"event": "response",
"ok": true,
"id": "789",
"author": "alice",
"author_id": "111",
"content": "Hello!",
"timestamp": "2024-01-01T12:00:00+00:00",
"attachments": [],
"embeds": [],
"reply_to": null,
"req_id": "111"
}
FieldRequiredTypeDescription
channel_idyesstringChannel ID
message_idyesstringMessage ID
req_idnostringCorrelation ID

Search messages in a channel by content.

Request:

{"action": "message_search", "channel_id": "123456", "query": "hello", "limit": 100, "author": "alice", "req_id": "112"}

Response:

{
"event": "response",
"ok": true,
"messages": [
{"id": "789", "author": "alice", "content": "Hello world!", "timestamp": "2024-01-01T12:00:00+00:00"}
],
"req_id": "112"
}
FieldRequiredTypeDescription
channel_idyesstringChannel ID
querynostringCase-insensitive search string
limitnointegerMessages to scan (default: 100)
authornostringFilter by author name
req_idnostringCorrelation ID

Server

server_list

List all servers the bot is in.

Request:

{"action": "server_list", "req_id": "120"}

Response:

{
"event": "response",
"ok": true,
"servers": [
{"id": "123456", "name": "My Server", "member_count": 42}
],
"req_id": "120"
}
FieldRequiredTypeDescription
req_idnostringCorrelation ID

server_info

Get details about a specific server.

Request:

{"action": "server_info", "guild_id": "123456", "req_id": "121"}

Response:

{
"event": "response",
"ok": true,
"id": "123456",
"name": "My Server",
"owner": "alice",
"member_count": 42,
"channel_count": 10,
"role_count": 5,
"created_at": "2024-01-01T00:00:00+00:00",
"req_id": "121"
}
FieldRequiredTypeDescription
guild_idyesstringServer ID
req_idnostringCorrelation ID

Webhooks

webhook_list

List webhooks for a channel.

Request:

{"action": "webhook_list", "channel_id": "123456", "req_id": "130"}

Response:

{
"event": "response",
"ok": true,
"webhooks": [
{"id": "555", "name": "My Hook", "channel_id": "123456"}
],
"req_id": "130"
}
FieldRequiredTypeDescription
channel_idyesstringChannel ID
req_idnostringCorrelation ID

webhook_create

Create a webhook for a channel.

Request:

{"action": "webhook_create", "channel_id": "123456", "name": "My Hook", "req_id": "131"}

Response:

{"event": "response", "ok": true, "webhook_id": "555", "name": "My Hook", "req_id": "131"}
FieldRequiredTypeDescription
channel_idyesstringChannel ID
nameyesstringWebhook name
req_idnostringCorrelation ID

webhook_delete

Delete a webhook.

Request:

{"action": "webhook_delete", "channel_id": "123456", "webhook_id": "555", "req_id": "132"}

Response:

{"event": "response", "ok": true, "req_id": "132"}
FieldRequiredTypeDescription
channel_idyesstringChannel ID
webhook_idyesstringWebhook ID
req_idnostringCorrelation ID

Events

event_list

List scheduled events for a server.

Request:

{"action": "event_list", "guild_id": "123456", "req_id": "140"}

Response:

{
"event": "response",
"ok": true,
"events": [
{"id": "777", "name": "Game Night", "start_time": "2026-04-01T20:00:00+00:00", "status": "scheduled"}
],
"req_id": "140"
}
FieldRequiredTypeDescription
guild_idyesstringServer ID
req_idnostringCorrelation ID

event_create

Create a scheduled event.

Request:

{
"action": "event_create",
"guild_id": "123456",
"name": "Game Night",
"start_time": "2026-04-01T20:00:00+00:00",
"end_time": "2026-04-01T23:00:00+00:00",
"description": "Weekly game night!",
"channel_id": "789",
"req_id": "141"
}

Response:

{"event": "response", "ok": true, "event_id": "777", "req_id": "141"}
FieldRequiredTypeDescription
guild_idyesstringServer ID
nameyesstringEvent name
start_timeyesstringStart time (ISO 8601)
end_timenostringEnd time (ISO 8601)
descriptionnostringEvent description
channel_idnostringVoice/stage channel ID
locationnostringExternal location
req_idnostringCorrelation ID