> ## Documentation Index
> Fetch the complete documentation index at: https://docs.vetox.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Variables reference

> Every placeholder variable in Vetox, grouped by feature — and why some use square brackets and others use curly braces.

Variables are placeholders replaced with real values when a message is sent.

## Two different syntaxes

<Warning>
  **Vetox uses two syntaxes, and they are not interchangeable.**

  | Syntax     | Used by                              |
  | ---------- | ------------------------------------ |
  | `[Square]` | Welcomer, goodbye and greet messages |
  | `{curly}`  | Everything else                      |

  A `{User}` in a welcome message is printed literally. A `[user]` in a ticket message is printed literally.
</Warning>

## The universal rule

<Warning>
  **An unknown variable becomes empty text, not an error** — and in embeds, **a field whose title or value ends up empty is dropped from the message entirely.**

  This is the single most common cause of "my embed field keeps disappearing". It is almost always a misspelled variable or one that does not exist for that feature.
</Warning>

## Welcomer, goodbye and greet

| Variable       | Value                                   |
| -------------- | --------------------------------------- |
| `[User]`       | The member                              |
| `[ServerName]` | Your server's name                      |
| `[UsersCount]` | The new member count                    |
| `[Inviter]`    | Who invited them — welcome only         |
| `[Code]`       | The invite code used — welcome only     |
| `[CountUrl]`   | A member-count image URL — welcome only |

<Warning>
  **`[Server]` is not a variable.** It appears in the default welcome message and prints literally. Replace it with `[ServerName]`.
</Warning>

<Note>
  `[Inviter]` and `[Code]` need **Manage Server** so Vetox can read invites.
</Note>

## Tickets

The richest set in Vetox. Usable in ticket embeds, channel-name formats and support-hours messages.

<AccordionGroup>
  <Accordion title="The member" icon="user">
    `{user}` `{mention}` `{username}` `{userid}` `{user.mention}` `{user.name}` `{user.username}` `{user.tag}` `{user.id}`
  </Accordion>

  <Accordion title="The ticket" icon="ticket">
    `{ticket}` `{number}` `{num}` `{ticket.number}` `{ticket-number}` `{#number}` `{ticket.channel}` `{ticket.channelName}` `{ticket.priority}` `{ticket.closeReason}` `{ticket.openedAt}` `{ticket.createdAt}` `{ticket.closedAt}` `{ticket.users}`
  </Accordion>

  <Accordion title="Channel, panel and option" icon="hashtag">
    `{channel}` `{channel.mention}` `{channel.name}` `{channel.id}` `{panel}` `{panel.name}` `{panel-name}` `{option}` `{option.label}`
  </Accordion>

  <Accordion title="The server" icon="server">
    `{server}` `{server.name}` `{server.id}` `{server.members}` `{server.icon}` `{server.banner}` `{guild}` `{members}`
  </Accordion>

  <Accordion title="Staff and actions" icon="user-shield">
    `{staff}` `{staff.mention}` `{staff.name}` `{claim.user}` `{claim.name}` `{close.user}` `{close.name}` `{close.reason}` `{escalate.reason}` `{escalate.panel}` `{reason}`
  </Accordion>

  <Accordion title="Form answers" icon="clipboard-list">
    `{form.1}`, `{form.2}` … — **1-indexed**, in the order your questions appear.

    `{form.Label}` also works, using the question's own label.
  </Accordion>

  <Accordion title="Time and statistics" icon="clock">
    `{date}` `{time}` `{timestamp}` `{time.created}` `{time.opened}` `{time.claimed}` `{time.closed}` — each also accepts `.age`.

    `{statistics.tickets.open}` `{statistics.tickets.created}` `{statistics.tickets.closed}` `{statistics.tickets.claimed}` `{statistics.tickets.averageRating}`
  </Accordion>

  <Accordion title="Support hours" icon="business-time">
    `{supportHours.status}` `{supportHours.nextOpen}` `{supportHours.nextOpenTime}` `{supportHours.nextOpenRelative}` `{supportHours.closesAt}` `{supportHours.closesAtTime}`
  </Accordion>
</AccordionGroup>

### Modifiers

Ticket variables accept modifiers with `{variable?modifier=value}`: `upper`, `lower`, `capitalize`, `truncate`, `slice`, `padleft`, `padright`, `replace`, `fallback`, `date`, `timestamp`, `math`, `ordinal`, `join`, `if`.

<Tip>
  `{user.name?upper}` shouts the name. `{ticket.closeReason?fallback=No reason given}` avoids an empty field being dropped — which is the cleanest fix for vanishing embed fields.
</Tip>

## Counting

`{count}` `{user}` `{record}` — plus `{start}` and `{savesLeft}` in the reset and save messages.

<Warning>
  `{server}` is offered but **always renders empty**. Type your server's name directly.
</Warning>

## Starboard

`{author}` `{stars}` `{channel}` `{link}` `{content}` `{emoji}`

## Self-Roles

`[Role]` — the role's name, in the DM notifications.

## Giveaway templates

`{prize}` `{winners}` `{host}` `{endsAt}` `{id}` `{description}` `{requiredRole}` `{minAccountAge}` `{entryCount}`

## Notifications

Each platform has its own set. Using one platform's variable on another resolves empty.

<AccordionGroup>
  <Accordion title="Twitch" icon="twitch">
    `{streamer.name}` `{streamer.url}` `{streamer.avatar}`

    Live only: `{stream.title}` `{stream.game}` `{stream.viewers}` `{stream.thumbnail}`
  </Accordion>

  <Accordion title="Kick" icon="tower-broadcast">
    `{streamer.name}` `{streamer.url}` `{streamer.avatar}`

    Live only: `{stream.title}` `{stream.category}` `{stream.viewers}` `{stream.thumbnail}`

    Note `{stream.category}`, not Twitch's `{stream.game}`.
  </Accordion>

  <Accordion title="YouTube" icon="youtube">
    `{channel.name}` `{channel.avatar}` `{video.title}` `{video.url}` `{video.thumbnail}` `{video.type}`
  </Accordion>

  <Accordion title="Reddit" icon="reddit">
    `{post.title}` `{post.url}` `{post.author}` `{post.content}` `{post.flair}` `{post.thumbnail}` `{subreddit.name}` `{subreddit.url}` `{subreddit.icon}`
  </Accordion>

  <Accordion title="Bluesky" icon="cloud">
    `{post.text}` `{post.url}` `{post.image}` `{post.likes}` `{author.name}` `{author.handle}` `{author.avatar}`
  </Accordion>

  <Accordion title="Steam" icon="steam">
    `{news.title}` `{news.url}` `{news.content}` `{news.category}` `{news.author}` `{game.name}` `{game.image}`
  </Accordion>

  <Accordion title="RSS" icon="rss">
    `{item.title}` `{item.url}` `{item.description}` `{item.author}` `{feed.name}` `{feed.url}`
  </Accordion>

  <Accordion title="Podcasts" icon="podcast">
    Working: `{episode.title}` `{episode.url}` `{episode.description}` `{podcast.name}`

    <Warning>
      `{episode.duration}`, `{podcast.author}` and `{podcast.artwork}` are offered but **never produce a value**. Any field built only from them is dropped.
    </Warning>
  </Accordion>
</AccordionGroup>

## Variables that do not work

<Warning>
  Confirmed non-functional. Avoid these:

  | Variable                                    | Where                                 | Behaviour                                                           |
  | ------------------------------------------- | ------------------------------------- | ------------------------------------------------------------------- |
  | `[Server]`                                  | Welcomer                              | Not a variable — prints literally                                   |
  | `{server}`                                  | Counting milestones                   | Always empty                                                        |
  | `{episode.duration}`                        | Podcasts                              | Always empty                                                        |
  | `{podcast.author}`                          | Podcasts                              | Always empty                                                        |
  | `{podcast.artwork}`                         | Podcasts                              | Usually empty                                                       |
  | `{username}`, `{server.name}`, `{nickname}` | **Application workflow actions**      | Always empty — they work in DM messages but not in action templates |
  | `{stream.*}`                                | Twitch/Kick **offline** announcements | Empty; live-only                                                    |
</Warning>

<Card title="Troubleshooting" icon="wrench" horizontal href="/en/help/troubleshooting">
  When a message does not arrive at all.
</Card>
