Forms
Replace one-off Google Forms with forms that live right inside your platform. Zander's form builder lets you create custom forms - for applications, feedback, event signups, or anything else - and sends each response straight to a Discord channel or forum thread. Staff can also turn any response directly into a support ticket. Forms also power the "linked form" option in the Applications feature, so a staff or player application can use one of your forms as its application step.
📸 Screenshot: A published form page with multiple question blocks and a submit button
For Players​
Submitting a Form​
Forms are published at /forms/<slug> (a web address staff choose when creating the form). Depending on how staff set it up, a form may require any of the following before you can fill it out, checked in this order:
- The form must be published (draft forms are not publicly reachable).
- Login required - if set, you're redirected to log in first.
- Password protected - if the form has an access password, you must enter it before the form renders (your browser remembers unlocked forms for the session).
- Anonymous - if enabled by staff, you can submit without your identity being attached to the response.
Supported question block types: title/description, section break, short answer, paragraph, multiple choice, checkboxes, dropdown, linear scale, and image upload. Each block can be marked required, and answers are validated (length, email/URL format, valid option membership, min/max selections, numeric range, image URL format).
After submitting, you are taken to a confirmation page. If the form has Submitter Can View enabled and you were logged in, you're taken straight to your submitted response.
Your Responses​
All your past form submissions are listed at /my/forms/responses. Click any entry to view the full response you submitted - you can only view your own responses unless you're staff.
📸 Screenshot: The /my/forms/responses page showing a list of submitted form responses with dates and form names
For Staff​
Creating a Form​
- Go to Dashboard → Forms and click Create Form.
- Enter a name and slug (the slug determines the public URL:
/forms/<slug>). - Add form blocks in order - each block is a question or input field, with a type, required flag, label/description, and type-specific config (options, min/max length, validation, etc.).
- Configure delivery options (see below).
- Save as a draft, then publish when ready.
📸 Screenshot: The form editor with multiple question blocks and delivery configuration options
Form Settings​
| Setting | Description |
|---|---|
| Name | Display name shown at the top of the form |
| Slug | URL-safe identifier - sets the public URL to /forms/<slug> |
| Status | draft (not publicly accessible) or published |
| Require Login | Require the submitter to be signed in |
| Allow Anonymous | Allow submissions without attaching the submitter's identity |
| Access Password | Optional password to restrict who can open the form |
| Submitter Can View | Whether submitters can view their own response after submission |
Discord Delivery​
When someone submits a form, Zander can automatically let your Discord know - set up one or both of these:
| Method | Setting | What Happens |
|---|---|---|
| Webhook notification | discordWebhookUrl + webhookEnabled: true | An embed is posted to the configured webhook URL |
| Forum thread | discordForumChannelId + postToForumEnabled: true | A new thread is created in the configured Discord forum channel containing the full response |
Both delivery methods happen in the background - if Discord notification fails for some reason, the player's submission still goes through fine.
Viewing Responses​
Go to Dashboard → Forms → <Form Name> → Responses to see all submissions, plus an aggregate summary per question (option counts/percentages for choice types, average + distribution for linear scale, text samples for free text, image URL list for uploads). You can:
- Filter responses by status (
new,in_progress,resolved) - View each individual response in full, formatted answer-by-answer
- Update a response's status
- Convert a response into a support ticket
Deleting a form is blocked once it has responses - archive it (set status back to draft, or leave unpublished) instead of trying to delete it.
Converting a Response to a Ticket​
From any response detail page, click Convert to Ticket. This:
- Creates a new support ticket with the form data pre-filled as the opening message
- Adds the submitter and converting staff member as ticket participants
- Posts a Discord embed in the ticket channel with action buttons
- Marks the form response as converted
This is blocked for anonymous responses (no submitter to notify) and for responses already converted.
Permissions​
| Permission | Description |
|---|---|
zander.web.forms | Base access to the Forms dashboard (list, create) |
zander.web.forms.<slug> | Manage one specific form by slug - edit, view responses, convert to ticket (e.g. zander.web.forms.feedback) |
zander.web.forms.* | Manage all forms |
zander.web.forms alone only grants list/create access - every per-form action additionally requires the matching zander.web.forms.<slug> node or the wildcard. The forms list itself is filtered down to only the forms the current user has access to.
Use slug-specific permissions to give different staff teams access to only the forms relevant to them - for example, give your events team zander.web.forms.event-signup without exposing other forms.
API Reference​
This section is for developers integrating with Zander directly; if you're just using the dashboard, you can skip it.
Base path /api/forms.
| Method | Path | Auth | Request | Response |
|---|---|---|---|---|
| GET | /api/forms/get | staff/session | id, slug, or published filter | Form(s) |
| POST | /api/forms/create | staff/session | name, slug, status, webhook/forum config, flags | Created form |
| POST | /api/forms/edit | staff/session | form fields | Updated form |
| POST | /api/forms/delete | staff/session | formId | Deletes (rejects if responses exist) |
| POST | /api/forms/publish | staff/session | formId | Sets status to published |
| GET | /api/forms/responses | staff/session | formId, filters | Response list |
| GET | /api/forms/response | staff/session | responseId | Single response |
| POST | /api/forms/response/status | staff/session | responseId, status | Updates response status |
Public form pages submit through their own POST /forms/:slug/submit route rather than the JSON API above; the JSON /api/forms/* endpoints exist mainly for dashboard/staff tooling and external integrations.
Feature Toggle​
"forms": true
Disabling this feature (setting it to false) removes all /forms/ routes from the site and disables the Forms dashboard section.