Discord-first auth, server operations, tickets, automation, AI, and paid onboarding in one place.
GuildPilot is a professional Discord automation platform for businesses and communities. It gives your Discord server structured ticketing, workflow automations, AI-powered support, and a centralized dashboard to manage everything.
The typical setup path takes about five minutes:
/login. GuildPilot creates your workspace automatically./ticket-panel in a Discord channel. Members can now open tickets.GuildPilot uses Discord OAuth for authentication. There are no separate email or password accounts. When you click "Continue with Discord", you are redirected to Discord's authorization page where you grant GuildPilot permission to read your basic profile (username, avatar, and user ID).
On first login, GuildPilot creates:
No additional personal information is collected during sign-in. Billing contact details (name, email, address) are only collected when you upgrade to a paid plan via the Billing page.
GuildPilot supports two OAuth flows depending on the server configuration. The code grant flow is preferred and exchanges a short-lived authorization code for an access token server-side. The implicit flow is used as a fallback when a client secret is not configured; the access token is returned in the URL fragment and forwarded to the server via JavaScript.
To sign out, click "Sign Out" in the sidebar. This clears your session on both the client and server.
The GuildPilot Discord bot handles ticket creation, transcript archival, and slash command interactions inside your Discord server. To install it:
Finding your Guild ID: In Discord, go to User Settings → Advanced → enable Developer Mode. Then right-click your server name in the sidebar and choose "Copy Server ID". This is a numeric string like 1234567890123456.
Once linked, the server will appear in the Servers table with an "Active" status. You can link multiple servers to one workspace (limits depend on your plan: 1 for Free, up to 5 for Pro, unlimited for Business).
GuildPilot provides a structured ticketing system that operates entirely within Discord, with web-side visibility for management and auditing.
Run /ticket-panel in any Discord channel where you want members to be able to open tickets. The bot posts an embed message with an "Open Ticket" button. You can have multiple panels in different channels if needed.
When a member clicks the button, GuildPilot:
open and priority normal.A team member can close a ticket by clicking the "Close Ticket" button in the channel or by running /ticket-close. On close, GuildPilot:
closed with a timestamp.The Tickets page in the GuildPilot web app shows all tickets for your workspace, including status, priority, guild, opener, creation date, close date, and transcript count. Use this view for auditing conversations, reviewing support quality, and tracking volume trends.
Automations let you define trigger-action chains that execute automatically when specific events occur in your linked Discord servers. Each automation has three components:
ticket_created, member_joined).priority = high). If all conditions pass, the actions execute.ticket_created — fires when a new ticket is opened.ticket_closed — fires when a ticket is resolved and archived.button_clicked — fires when a custom button interaction is detected.member_joined — fires when a new member joins a linked server.member_left — fires when a member leaves a linked server.role_assigned — fires when a role is added to a member.message_received — fires on incoming messages (use conditions to filter).Use the Automations page in the dashboard. Enter a descriptive name, select a trigger, optionally add conditions (one per line in the conditions textarea), and define actions (one per line). Automations can be enabled or disabled individually without deleting them.
Automations are stored as JSON definitions in the database. The definition_json column contains the full definition including conditions and actions arrays. You can also manage automations programmatically via the API endpoint POST /api/automations?action=save.
The AI ticket assistant is a Business-plan feature that automatically responds to questions in ticket channels using content from your knowledgebases.
Go to the AI Assistant page in the dashboard to configure:
Create knowledgebases from the AI Assistant page. Each knowledgebase is a named collection of reference material that the AI searches when formulating responses. Knowledgebases have three statuses:
active — available for AI queries.building — being indexed or updated.disabled — excluded from AI queries.When a ticket is opened and AI is enabled: the assistant searches your active knowledgebases for relevant content, generates a response, and checks its confidence score against your threshold. If confidence is sufficient, it posts the answer directly in the ticket channel. If not, it posts the fallback message and mentions your support role so a human can follow up.
GuildPilot keeps the sign-in experience frictionless by using Discord-only authentication. No email, password, or personal information is collected during basic login.
When a workspace is ready to upgrade to a paid plan (Pro or Business), the Billing page collects the business details needed for invoicing:
This information is stored on the tenant record and timestamped when first collected. It supports future payment processing integration without burdening free-tier users with unnecessary forms.
GuildPilot exposes a REST API for programmatic access to all core features. All endpoints accept and return JSON. CORS headers are included for cross-origin access.
GET /api/auth?action=discord_start — Redirects to Discord OAuth authorization page.GET /api/auth?action=discord_callback&code=...&state=... — Handles code grant OAuth callback, creates session.POST /api/auth?action=discord_implicit_complete — Completes implicit flow. Body: {"access_token": "...", "state": "..."}GET /api/auth?action=logout — Clears session and redirects to login page.POST /api/tickets?action=create — Create a ticket. Body: {"tenant_id", "guild_id", "channel_id", "opener_user_id"}. Returns {"ok": true, "ticket_id": 123}POST /api/tickets?action=close — Close a ticket. Body: {"ticket_id"}POST /api/tickets?action=transcript — Record a transcript path. Body: {"ticket_id", "storage_path"}GET /api/tickets?action=list&tenant_id=X — List tickets for a tenant. Returns up to 200 records, newest first.GET /api/servers?action=list&tenant_id=X — List linked Discord servers for a tenant.POST /api/servers?action=link — Link a server. Body: {"tenant_id", "guild_id", "guild_name"}. Uses upsert — re-linking reactivates an existing record.GET /api/automations?action=list&tenant_id=X — List all automations for a tenant.POST /api/automations?action=save — Create or update an automation. Body: {"tenant_id", "name", "trigger_type", "definition_json": {"conditions": [...], "actions": [...]}, "enabled", "id" (optional for update)}GET /api/ai?action=settings&tenant_id=X — Get AI settings and knowledgebases for a tenant.POST /api/ai?action=settings — Update AI settings. Body: {"tenant_id", "enabled", "confidence_threshold", "support_role_id", "fallback_message"}GET /api/health — Returns {"ok": true, "service": "guildpilot-web", "time": "2024-01-15T12:00:00Z"}