🔀 Bot Modes
Every Kitcord bot runs in one of two modes — Interaction Only or Full Bot. The mode decides how your bot connects to Discord, what it can react to, and how much energy it costs to keep alive.
⚖️The two modes
The default for every new bot. Handles slash commands via a single HTTPS endpoint that Discord calls directly — no persistent connection to keep open.
🔓What each mode unlocks
| Capability | Interaction Only | Full Bot |
|---|---|---|
| Slash commands (Spells) | ✅ | ✅ |
| Triggers (gateway events) | ❌ ignored until you switch | ✅ |
| Timers | ❌ ignored until you switch | ✅ |
| Gateway-only Pieces | ❌ inactive in slash-command flows only | ✅ |
| Energy cost | None | ⚡ ~21/hr · 500/day |
You can build triggers and timers in Interaction Only mode — they're saved in your Kit, just not run until you switch to Full Bot. Kitcord warns you about this on the Triggers page and before you go live.
🔁Switching modes
Change modes any time from your bot's Settings — no code, no redeploy.
- Open your bot, go to Settings → Discord.
- Under Bot Type, pick the mode you want.
- Switching to Full Bot from Triggers works the same way — Kitcord shows a one-click upgrade prompt the moment you try to add a trigger.
🔗The Interactions Endpoint URL
Interaction Only bots need one extra step in the Discord Developer Portal.
Because an Interaction Only bot has no persistent connection, Discord needs to know where to send slash-command requests. Kitcord generates this URL for you — copy it from Settings → Discord and paste it into your app's General Information → Interactions Endpoint URL field in the Discord Developer Portal.
https://<your-app-url>/api/bots/{botId}/interactionsDiscord verifies this endpoint with your bot's public key before it will accept it — make sure your Application ID, token, and public keyare all saved in Settings first. Kitcord's settings page shows a live checklist so you can see exactly what's missing.
📦Self-hosted / exported bots
Bot mode travels with your export as an environment variable.
If you export your bot to run it yourself (see Kit Schema), the mode is set via BOT_MODE. An interaction_only export runs as a stateless HTTP handler; full_gateway runs the full Discord.js client.
# Self-hosted / exported bots read the mode from an env var:
BOT_MODE=interaction_only # or full_gateway
# interaction_only bots serve a single HTTPS endpoint:
POST /api/bots/{botId}/interactions