Changelog
All notable changes to the Argon Bot API.
1.12.0
2026-09-28Files in Messages & Custom Emoji Reactions
Added
IMessages POST /Send takes attachments — at most 10 per message, with AttachFiles: fileIds from IFiles/Upload with purpose attachment in a JSON body, or the same fields as a multipart request with parts named attachments or attach://<part> references (about 10 MiB of parts per request). The response lists them as attachments (fileId, url, fileName, size, contentType, width, height)
Added
IMessages Messages in History and in MessageCreate events carry attachments; the attachment entity carries its url
Added
IMessages Refusals of a message with files: 403 insufficient_permissions (no AttachFiles), 404 not_found (an unknown, expired or non-attachment upload), 400 validation_error (more than 10), 400 invalid_format (an empty file), 400 invalid_request (attach:// in a JSON body) and 413 too_large
Added
IFiles POST /Upload takes purpose attachment: any type up to 10 MiB, keeping the part's file name and content type; BotFileV1 gains fileName
Added
IReactions POST /AddCustom and POST /RemoveCustom — react with a custom emoji by itemId (spaceId, channelId, messageId, itemId). An emoji of the message's space works for every bot; another space's emoji only for verified bots (403 insufficient_permissions otherwise)
Added
IReactions Reactions in List, BatchGet, History and messages carry customEmojiId; a custom emoji's emoji reads :name:
Added
IEvents ReactionAdd and ReactionRemove carry customEmojiId, emojiName and emojiUrl for a custom emoji (emojiUrl is null once the emoji is deleted)
Fixed
IReactions GET /List found no message; it now answers from the channel's current reactions
1.11.0
2026-09-27Stickers & Custom Emoji
Added
IExpressions New IExpressions/v1 interface — read a space's sticker and custom emoji packs and add to them
Added
IExpressions GET /List (with the known version token: packs is null while current), GET /GetPack (by packId or slug), GET /GetQuota (packs, sticker and emoji slots by boost level)
Added
IExpressions POST /CreatePack — idempotent by slug for the same bot; PATCH /UpdatePack — title and cover of the bot's own packs
Added
IExpressions POST /AddItem (multipart) — PNG, WEBP, TGS, Lottie JSON or WEBM; the file as a part, an attach:// reference or a fileId; the server renders the preview of an animated item itself. PATCH /UpdateItem — name, emoji, keywords, textColor of the bot's own items
Added
IFiles New IFiles/v1 interface — POST /Upload returns a fileId that AddItem takes for 24 hours (at most 100 unused per bot); GET /Get describes a file and gives its URL
Added
New CreateExpressions permission for bots. Bots change only the packs and items they made and never delete or reorder
Added
IEvents New Expressions intent (bit 14 = 16384, one of the default intents) and ExpressionsUpdate event — spaceId, version, baseVersion and a delta: packUpserted, packDeleted, itemUpserted, itemDeleted, packsReordered or itemsReordered
Added
New error codes: invalid_format, invalid_request, too_large (413), quota_exceeded and content_rejected (422), name_taken (409), space_rate_limited (429, Retry-After: 60) for the per-space budget of 120 bot changes a minute, and render_unavailable (503) when the server cannot render an animated item right now
Added
Rate limits: IExpressions 60 requests/min, IFiles 30 requests/min
1.10.0
2026-06-05User Locale & GIF Messages
Added
User objects now carry an optional locale field — the user's current app language as a BCP-47 tag (e.g. "en", "ru", "ja"). Use it to reply in the user's language or pick a voice in calls. It reflects the user's live session choice (not persisted), can change between events, and may be null when unknown.
Added
IEvents locale is present on the user object in CommandInteraction, ControlInteraction, SelectInteraction, ModalSubmit, MemberJoin, MemberUpdate, PresenceUpdate, VoiceJoin, and VoiceLeave events
Added
IMessages Message senders now carry locale on the user object in MessageCreate events and message history
Added
IEvents CallIncoming event now includes a nullable fromLocale — the caller's language, for choosing a voice in calls
Added
IMessages New GIF message entity (type "gif") — messages can include GIFs with gifId, previewUrl, downloadUrl, width, height, fileId, and hmac
1.9.0
2026-04-26Voice State on Interactions
Added
New BotVoiceStateV1 DTO — contains channelId, joinedAt timestamp, and channel member state flags
Added
IEvents ControlInteraction event now includes nullable VoiceState — present when the interacting user is in a voice channel
Added
IEvents SelectInteraction event now includes nullable VoiceState
Added
IEvents ModalSubmit event now includes nullable VoiceState
Added
IEvents CommandInteraction event now includes nullable VoiceState
Changed
IEvents Contract updated for ControlInteraction, SelectInteraction, ModalSubmit, and CommandInteraction events (VoiceState field added)
1.8.0
2026-04-18Reactions
Added
IReactions New IReactions/v1 interface — add, remove, and list emoji reactions on messages
Added
IReactions POST /Add — add a reaction to a message (max 20 unique emoji per message)
Added
IReactions DELETE /Remove — remove the bot's own reaction from a message
Added
IReactions GET /List — list all reactions on a message with count and user preview
Added
IEvents New ReactionAdd event — fired when a user adds a reaction (requires Reactions intent)
Added
IEvents New ReactionRemove event — fired when a user removes a reaction (requires Reactions intent)
Added
IMessages Message history now includes reactions array with emoji, count, and user preview (up to 3 IDs)
Added
Reaction user preview — userIds array capped at 3 entries on the wire; use count field for the full total
Added
IReactions Rate limit: 60 requests/min
1.7.0
2026-04-14Control Archetype Constraints
Added
IMessages New requiredArchetypeId field on controls — restrict button/select interaction to members with a specific archetype
Added
IInteractions Controls sent via Reply and EditMessage now support requiredArchetypeId
Added
Backend enforcement: InteractWithControl and InteractWithSelect return ARCHETYPE_REQUIRED error when user lacks the required archetype
Added
Administrator bypass: users with ManageServer permission can always interact with archetype-constrained controls
Added
Client visibility hint: requiredArchetypeId can be used by clients to hide controls from users without the archetype
Changed
IMessages Contract hash updated (RequiredArchetypeId added to BotControlV1)
Changed
IInteractions Contract hash updated (RequiredArchetypeId added to BotControlV1)
1.6.0
2026-04-14Archetypes API & Events
Added
IArchetypes New IArchetypes/v1 interface — list and inspect archetypes (roles) in a space
Added
IArchetypes GET /List — list all visible archetypes with id, name, colour, isMentionable, isDefault
Added
IArchetypes GET /Get — get a single archetype by ID
Added
IArchetypes GET /ListMembers — list all members assigned to a specific archetype
Added
IArchetypes Permissions bitmask only exposed when bot has ManageArchetype entitlement
Added
IEvents New ArchetypeCreate event — fired when a new archetype is created in a space
Added
IEvents New ArchetypeUpdate event — fired when an archetype is modified in a space
Added
IArchetypes Rate limit added: 30 requests/min
1.5.0
2026-04-14Typing Indicators
Added
ITyping New ITyping/v1 interface — send typing indicators to channels
Added
ITyping POST /Start — trigger a typing indicator with optional kind (typing, thinking, uploading, searching)
Added
ITyping POST /Stop — explicitly stop the typing indicator (auto-expires after 8 seconds)
Added
IEvents New TypingStart event — fired when a user or bot starts typing in a channel
Added
IEvents New TypingStop event — fired when a user or bot stops typing in a channel
Added
ITyping Rate limit added: 60 requests/min
Added
Bot typing auto-stop — typing indicator automatically expires after 8 seconds if not refreshed
1.4.0
2026-04-13Selects, Modals & Interaction Lifecycle
Added
IInteractions POST /Ack — acknowledge an interaction, client shows brief confirmation
Added
IInteractions POST /Defer — defer an interaction, client shows loading state until bot follows up
Added
IInteractions POST /Modal — show a modal dialog with text inputs, selects, and checkboxes to the invoking user
Added
IEvents New SelectInteraction event — fired when a user submits a select menu (String, User, Archetype, Channel)
Added
IEvents New ModalSubmit event — fired when a user submits a modal form
Added
IEvents New MessageEdit event — fired when a message is edited in a channel
Added
Select controls — StringSelect, UserSelect, ArchetypeSelect, ChannelSelect with customId, placeholder, min/max values, and options
Added
Modal components — TextInput (short/paragraph), StringSelect, UserSelect, ArchetypeSelect, ChannelSelect, Checkbox
Added
InteractWithSelect channel method — submit select menu values, validated against allowed options
Added
SubmitModal channel method — submit modal form values by interaction ID
Changed
IInteractions Contract hash updated (Ack, Defer, Modal routes added)
Changed
IMessages Contract hash updated (MessageEdit event added)
Fixed
EditBotMessage now broadcasts MessageEdited event via SignalR to connected clients
Added
Interaction responses delivered via SignalR 'interactionResponse' method (Ack, Deferred, ShowModal)
1.3.0
2026-04-13Rate Limit Overhaul
Changed
Switched from token bucket to sliding window algorithm — no background timers, lazy window advancement
Changed
Added global concurrency limiter (10 parallel requests per bot) instead of unused global token bucket
Changed
IMessages Rate limit increased from 20 to 120 requests/min
Changed
IInteractions Rate limit increased from 15 to 120 requests/min
Changed
ICommands Rate limit increased from 10 to 60 requests/min
Changed
IChannels Rate limit increased from 10 to 60 requests/min
Changed
ISpaces Rate limit increased from 5 to 30 requests/min
Changed
IMembers Rate limit increased from 5 to 30 requests/min
Changed
IVoice Rate limit increased from 5 to 20 requests/min
Added
IBotSelf Rate limit added: 15 requests/min
Added
ICalls Own rate limit policy: 20 requests/min (was shared with IVoice)
Added
IVoiceEgress Own rate limit policy: 10 requests/min (was shared with IVoice)
Added
IEvents Rate limit added: 5 requests/min
1.2.0
2026-04-13Interactive Controls & IInteractions API
Added
IInteractions New IInteractions/v1 interface — Reply to interactions, edit message text and controls
Added
IMessages SendMessage now accepts optional 'controls' — rows of interactive buttons attached to messages
Added
IMessages Message history now includes 'controls' in the response
Added
IEvents New ControlInteraction event — fired when a user clicks a Callback button
Added
IEvents New ControlInteractions intent (bit 13, value 8192)
Changed
IMessages Contract hash updated (controls field added to Send request and History response)
Changed
IEvents CommandInteraction event now includes interactionId as correlation token
Added
Message Constructor — interactive playground in docs for building messages with entities and controls
Added
OKLCH colour model for theme-adaptive button colours (L 0.40–0.80, C 0.00–0.37, H 0–360°)
Added
IInteractions rate limit: 15 requests/min
1.1.0
2026-04-13Bot Lifecycle Events, Slash Commands & Rate Limits
Added
IEvents New botInstallingToSpace and botUninstallingFromSpace lifecycle events — sent directly to the bot when it is installed or removed from a space
Added
IEvents CommandInteraction event — dispatched when a user invokes a slash command registered by the bot
Changed
ICommands Rate limiting applied: 10 requests per minute
Changed
IChannels Rate limiting applied: 10 requests per minute
Changed
IMembers Rate limiting applied: 5 requests per minute
Changed
IVoice Rate limit defaults now included in manifest (5 requests per minute)
1.0.0
2026-04-09Initial Bot API Release
Added
IBotSelf Bot identity endpoints: GetMe, GetSpaces
Added
IMessages Send messages and query message history
Added
IChannels List, create, and delete channels
Added
ISpaces Get space info, list and get members
Added
IMembers Kick members, manage archetypes
Added
IEvents SSE event stream with intent filtering and resume
Added
ICommands Slash command registration and management
Added
IVoice Voice channel streaming token generation