Documentation
Build a Discord bot in minutes.
Conjure turns plain-English descriptions into working discord.js bots — code you can read, edit, test in a sandboxed Discord, and deploy live with one click. This page is the full manual.
Quickstart
Five steps. The first three take under two minutes; the last two take as long as Discord makes you wait for an app to be created.
- Sign up with Discord (recommended — that way Conjure already knows your handle for the connect step later) or with email.
- Describe your boton the "new bot" page. Be concrete: "a moderation bot with /kick, /ban, /mute, and a warnings counter that resets weekly". The AI generates the discord.js code in real time.
- Start from a template (optional). Browse discord.js templates — ping, welcome, moderation — then customize in chat.
- Connect your Discord application. Paste the bot token from the Discord developer portal. Conjure encrypts it at rest; you'll never see it again from the UI.
- Deploy. One click ships your bot to managed Fly.io infrastructure. The post-deploy wizard gives you a one-click invite link for your server.
The workflow in detail
Chat with the AI
Every bot starts as a conversation. Conjure runs Claude Sonnet 4.5 for fresh generation and routes follow-up edits to Haiku 4.5 when the change is small enough — you get fast, cheap iterations for tweaks and the big model when you need new features.
Long conversations get automatically summarised after 30 turns so you don't pay token costs for ancient back-and-forth, but the recent 10 messages stay verbatim so the AI never "forgets" what you're currently asking about.
Edit the code yourself
The Monaco editor (same one VS Code uses) is right next to the chat. Edit anything by hand — the AI sees your changes on the next turn and adapts. Useful for tweaks that are faster to type than describe.
Test on Discord
After deploy, use a private server to try slash commands. Invite the bot with the applications.commands scope. Global commands can take up to an hour to update on Discord's side after a redeploy.
Connect your bot token
Create an application in the Discord developer portal, grab the bot token, paste it into Conjure's connect modal. We encrypt it with libsodium sealed boxes before it touches the database. The decryption key never leaves the deploy environment. The token is write-only from your end — the UI shows "Connected" but never the value.
Deploy
Deploys run on Fly.io Machines, one per bot. Each gets a persistent volume mounted at /app/data so your bot can keep state (sqlite, JSON files, level data) across redeploys. We scale to zero when idle with ~1s cold-start.
Logs stream live back into the editor — open the status pill in the bot header to follow along. Iterating on a live bot: edit code, click Deploy again. Old machine shuts down, new one comes up, volume survives.
Self-host the export
Don't want managed hosting? Download a ZIP of your bot's code from any plan (including Free). Standard Node project — npm install → DISCORD_TOKEN=… node src/index.js → it runs anywhere Node 20+ does.
Plans & quotas
All limits are per calendar month. Allowances reset on the 1st. Tax handled automatically by Stripe at checkout.
| Plan | Price | Bots | AI updates / mo | Live deploys |
|---|---|---|---|---|
| Free | Free | 1 | 25 | — |
| Hobby | $10/mo | 3 | 150 | 1 |
| Pro | $19/mo | 6 | 500 | 3 |
| Studio | $49/mo | Unlimited | Fair-use | 10 |
$1 / 24h trial
If you want the full Hobby experience without committing to a subscription, the trial is a one-off $1 charge that grants 24 hours of Hobby-tier access. No auto-renew — your card never gets touched again unless you explicitly upgrade. After it expires you drop back to Free.
The trial is single-use per account. If you cancel a paid subscription later, you can't restart the trial from scratch — upgrade directly to Hobby or higher.
What counts as an "AI update"?
One chat turn between you and Conjure = one update. Describing a brand-new bot, asking for a tweak, or pasting an error and asking for a fix all count identically. Background calls Conjure makes on your behalf (lint, classify, summarise) don't count against your allowance.
What counts as a "bot"?
Each row in your workspace. Deleting a bot doesn't free a slot for the rest of the calendar month — this is anti-abuse, documented in the delete confirmation. Bot creation resets on the 1st.
What counts as a "live deployment"?
A bot currently in deployedstatus (i.e. burning Fly Machine seconds). Drafts, stopped, and errored bots don't count. Free tier can't deploy at all — you can still build and edit bots on Free without spending Fly money.
API
Conjure exposes a small REST API for everything you can do in the dashboard — list bots, create new ones, iterate via streaming, deploy, fetch logs. Authentication is via personal access tokens (PATs) you generate in Settings → API tokens. Tokens carry your full account permissions; treat them like passwords.
Base URL
https://useconjure.app/api/v1Auth
Send a bearer token in the Authorization header. Tokens are shown once at creation — copy them immediately, we can't recover them after.
curl https://useconjure.app/api/v1/me \
-H "Authorization: Bearer cnj_live_xxxxxxxxxxxxxxxxx"Rate limits: 5 burst / 1 token per 3 seconds sustained, same as the dashboard. Quotas:API calls count against your normal monthly AI-update budget — there's no separate API allowance.
Endpoints
/meYour account, plan tier, current usage.
/botsList all your bots.
/botsCreate a new bot. Body: { name, description? }.
/bots/:idFetch one bot — config, status, files.
/bots/:idUpdate name, description, or saved files.
/bots/:idSoft-delete a bot. Frees no quota slot.
/bots/:id/iterateStream a chat turn (SSE). Same engine as the editor.
/bots/:id/deployDeploy the latest saved code to Fly.
/bots/:id/logsRecent Fly logs (last 200 lines).
Example: create + iterate + deploy
# 1. Create a bot
curl -X POST https://useconjure.app/api/v1/bots \
-H "Authorization: Bearer $CONJURE_TOKEN" \
-H "Content-Type: application/json" \
-d '{"name": "Welcome bot", "description": "Greets new members"}'
# Returns: { "ok": true, "data": { "id": "abc-123", ... } }
# 2. Iterate (streaming SSE)
curl -N -X POST https://useconjure.app/api/v1/bots/abc-123/iterate \
-H "Authorization: Bearer $CONJURE_TOKEN" \
-H "Content-Type: application/json" \
-d '{"messages":[{"role":"user","content":"Add a /ping command"}]}'
# 3. Deploy
curl -X POST https://useconjure.app/api/v1/bots/abc-123/deploy \
-H "Authorization: Bearer $CONJURE_TOKEN"Response envelope
Every endpoint returns either:
{ "ok": true, "data": { ... } }
{ "ok": false, "error": { "code": "...", "message": "..." } }Status codes follow standard conventions — 401 (missing/bad token), 403 (out of quota), 404 (no such bot), 429 (rate limited), 5xx (us). The error.message field is safe to surface directly to your users.
Use Conjure from Discord
The official Conjure Discord server runs a bot that exposes the same API from inside a Discord channel. You'll be able to type /conjure new "a poll bot", watch the code get generated, and deploy without ever leaving Discord.
FAQ
Can I export my code and host it somewhere else?
DISCORD_TOKEN into the env and it runs anywhere.