Skip to main content

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.

note

📸 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.

note

📸 Screenshot: The /my/forms/responses page showing a list of submitted form responses with dates and form names


For Staff​

Creating a Form​

  1. Go to Dashboard → Forms and click Create Form.
  2. Enter a name and slug (the slug determines the public URL: /forms/<slug>).
  3. 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.).
  4. Configure delivery options (see below).
  5. Save as a draft, then publish when ready.
note

📸 Screenshot: The form editor with multiple question blocks and delivery configuration options

Form Settings​

SettingDescription
NameDisplay name shown at the top of the form
SlugURL-safe identifier - sets the public URL to /forms/<slug>
Statusdraft (not publicly accessible) or published
Require LoginRequire the submitter to be signed in
Allow AnonymousAllow submissions without attaching the submitter's identity
Access PasswordOptional password to restrict who can open the form
Submitter Can ViewWhether 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:

MethodSettingWhat Happens
Webhook notificationdiscordWebhookUrl + webhookEnabled: trueAn embed is posted to the configured webhook URL
Forum threaddiscordForumChannelId + postToForumEnabled: trueA 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
tip

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:

  1. Creates a new support ticket with the form data pre-filled as the opening message
  2. Adds the submitter and converting staff member as ticket participants
  3. Posts a Discord embed in the ticket channel with action buttons
  4. Marks the form response as converted

This is blocked for anonymous responses (no submitter to notify) and for responses already converted.

Permissions​

PermissionDescription
zander.web.formsBase 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.

tip

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.

MethodPathAuthRequestResponse
GET/api/forms/getstaff/sessionid, slug, or published filterForm(s)
POST/api/forms/createstaff/sessionname, slug, status, webhook/forum config, flagsCreated form
POST/api/forms/editstaff/sessionform fieldsUpdated form
POST/api/forms/deletestaff/sessionformIdDeletes (rejects if responses exist)
POST/api/forms/publishstaff/sessionformIdSets status to published
GET/api/forms/responsesstaff/sessionformId, filtersResponse list
GET/api/forms/responsestaff/sessionresponseIdSingle response
POST/api/forms/response/statusstaff/sessionresponseId, statusUpdates 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.