> For the complete documentation index, see [llms.txt](https://zoomiescore.gitbook.io/zoomiescore-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://zoomiescore.gitbook.io/zoomiescore-docs/appeals.md).

# appeals

Give banned or timed-out users a public URL to plead their case without needing to be in the server.

## Flow

{% stepper %}
{% step %}

## A moderator issues a `/ban` or `/timeout`

A moderator issues a `/ban` or `/timeout` from Discord or the dashboard.
{% endstep %}

{% step %}

## The mod-log embed includes an appeal token

The mod-log embed for that action includes a unique **appeal token**. When the target member is DM'd, they get the appeal URL pre-filled with the token.
{% endstep %}

{% step %}

## The user submits an appeal

The user visits `/appeal/<token>` (public — no login needed) and submits their appeal: a text explanation.
{% endstep %}

{% step %}

## The appeal appears in the dashboard

The appeal shows up in **Dashboard → Appeals** for the mod team.
{% endstep %}

{% step %}

## A mod approves or rejects it

A mod approves or rejects. Approval automatically:

* Unbans / removes the timeout.
* DMs the user a Discord re-invite link (if enabled in Settings).
* Marks the appeal `accepted`.
  {% endstep %}
  {% endstepper %}

## Rate limits

* **3 open appeals** per user per guild — prevents spam.
* **24-hour cooldown** on re-submitting after a rejection.
* **60 lookups per minute per IP** on the public `/appeal/:token` endpoint to prevent enumeration.

## Direct-entry fallback

If the DM didn't arrive (user has DMs closed, etc.), they can visit `/appeal` and enter their token manually.

## Dashboard: `/dashboard/appeals`

Filter by status (pending / accepted / rejected), search by user, export as CSV, and see the audit trail of who reviewed each appeal and when.
