🎉 Tickety V3 has now been released! Read more →
Placeholders

Using placeholders

Dynamic placeholders and parsers for messages

Use placeholders to render live values inside embeds, buttons, panel messages, and automated replies. The catalog below is organized by scope so you can quickly see what is always available and what only appears in a specific context.

Quick reference

The most common placeholders are member.*, guild.*, panel.*, and ticket.*. If a placeholder is blank, first confirm the message context actually provides that data.

PlaceholderPurpose
member.mentionPing the current member
member.displayNameUse the member nickname or display name
member.usernameUse the member username
guild.nameShow the server name
ticket.creator.mentionPing the ticket creator
ticket.numberShow the ticket number
ticket.closeReasonShow the close reason
panel.nameShow the panel name

Base placeholders

These are available in most message contexts.

PlaceholderDescription
currentTimeCurrent timestamp in Unix format
member.idMember ID
member.mentionMention for the current member
member.displayNameMember display name or nickname
member.usernameMember username
member.avatarUrlMember avatar URL
member.joinedAtWhen the member joined, in Unix format
member.createdAtWhen the member account was created, in Unix format
member.rolesList of member role IDs
member.roles.0First role ID from the member role list
guild.idServer ID
guild.nameServer name
guild.memberCountTotal member count
guild.createdAtServer creation timestamp in Unix format

All timestamps are provided in Unix format. Learn how to parse them.

Statistics placeholders

These placeholders resolve to numbers and fall back to 0 when the data is unavailable.

PlaceholderDescription
statistics.tickets.averageRatingAverage ticket rating
statistics.tickets.createdTotal tickets created
statistics.tickets.closedTotal tickets closed
statistics.tickets.openTotal tickets currently open
statistics.tickets.claimedTotal tickets claimed
statistics.tickets.expectedResponseTimeExpected first response time as a readable duration. Premium only, and resolves to Unknown when unavailable
statistics.applications.totalTotal applications submitted
statistics.applications.pendingTotal applications pending
statistics.applications.acceptedTotal applications accepted
statistics.applications.deniedTotal applications denied
statistics.giveaways.totalTotal giveaways created
statistics.giveaways.totalParticipantsTotal giveaway participants
statistics.giveaways.averageParticipantsAverage participants per giveaway
statistics.verifications.totalTotal verifications processed
statistics.verifications.failedTotal failed verifications
statistics.verifications.passedTotal passed verifications

statistics.tickets.expectedResponseTime is the exception to the numeric rule above: it resolves to a formatted duration such as 5m, requires premium, and falls back to Unknown when there is not enough data.

Context-specific placeholders

The sections below contain placeholders that only exist in a specific message scope.

Ticket-related placeholders are merged with the base placeholders for ticket messages.

PlaceholderDescription
ticket.numberTicket numeric identifier
ticket.creator.idTicket creator member ID
ticket.creator.mentionPing the ticket creator
ticket.creator.displayNameTicket creator display name
ticket.creator.usernameTicket creator username
ticket.creator.avatarUrlTicket creator avatar URL
ticket.creator.joinedAtWhen the ticket creator joined, in Unix format
ticket.creator.createdAtWhen the ticket creator account was created, in Unix format
ticket.creator.rolesTicket creator role IDs
ticket.creator.roles.0First role ID from the ticket creator role list
ticket.closeReasonClose reason
ticket.openedAtTicket open timestamp in Unix format
ticket.usersList of user IDs in the ticket
ticket.users.0First user ID in the ticket user list
ticket.channelNameTicket channel name
ticket.priorityTicket priority value
ticket.claimer.idTicket claimer member ID
ticket.claimer.mentionPing the ticket claimer
ticket.claimer.usernameTicket claimer username
ticket.claimer.avatarUrlTicket claimer avatar URL
ticket.claimer.createdAtWhen the ticket claimer account was created, in Unix format
ticket.formTicket form entries
ticket.form.0.questionFirst ticket form question
ticket.form.0.answerFirst ticket form answer. Image Upload questions render [Image] instead of a link
ticket.form.0.requiredWhether the first ticket form field was required
ticket.createdAtTicket creation timestamp in Unix format
ticket.closedAtTicket close timestamp in Unix format
ticket.closer.idTicket closer member ID
ticket.closer.mentionPing the ticket closer
ticket.closer.usernameTicket closer username
ticket.closer.avatarUrlTicket closer avatar URL
ticket.closer.createdAtWhen the ticket closer account was created, in Unix format
ticket.channelMentionLink to the ticket channel
remainingTimeHow long is left before an autoclose reminder closes the ticket
waitingSinceHow long the ticket has been waiting for a reply

Use the ticket creator placeholders for welcome messages, the claimer and closer placeholders for assignment and closure flows, and ticket.form.* when rendering user-submitted answers.

The last three are tied to one message each. remainingTime belongs to the autoclose reminder. waitingSince and ticket.channelMention belong to the inactivity notification, which is posted outside the ticket and needs the link to send staff back to it.

Answers to Image Upload questions render as [Image] rather than a link. Uploaded images are stored privately, and anything a placeholder renders into a message can be read by everyone who can see that message. Use the View Uploads button on the ticket to view them, or the Uploads API to fetch them from your own systems.

Application placeholders are available in application panel and application workflow messages.

PlaceholderDescription
application.numberApplication numeric identifier
application.creator.idApplication creator member ID
application.creator.mentionPing the application creator
application.creator.displayNameApplication creator display name
application.creator.usernameApplication creator username
application.creator.avatarUrlApplication creator avatar URL
application.creator.joinedAtWhen the application creator joined, in Unix format
application.creator.createdAtWhen the application creator account was created, in Unix format
application.creator.rolesApplication creator role IDs
application.creator.roles.0First role ID from the application creator role list
application.reviewMessageLink to the submission's review message, so a reviewer jumps straight to the accept and deny buttons

These values are useful in submit, accept, deny, and finish messages.

application.reviewMessage is meant for the inactivity notification, which is posted away from the submission itself.

Panel placeholders are exposed on panel views and panel messages.

PlaceholderDescription
panel.namePanel display name
panel.supportRolesRole IDs that can support this ticket panel
panel.supportRoles.0First support role ID
panel.openTicketsNumber of currently open tickets for this panel
panel.reviewRoleApplication review role ID
panel.pendingApplicationsNumber of pending applications
panel.openApplicationsNumber of open applications on this application panel
panel.statistics.openOpen tickets on a ticket panel, or open applications on an application panel
panel.emojiPanel emoji

Panel values are especially useful when you want the message to reflect the exact configuration the user is interacting with. Ticket panels resolve panel.supportRoles and panel.openTickets, application panels resolve panel.reviewRole, panel.pendingApplications and panel.openApplications, and panel.name, panel.emoji and panel.statistics.open resolve on both.

Support hours placeholders are available where support-hours are configured.

PlaceholderDescription
supportHours.statusCurrent support status
supportHours.nextOpenTimestamp of the next open time in Unix format
supportHours.closesAtTimestamp of when support closes in Unix format

Status board placeholders resolve in the board message on the Status Board page, and nowhere else.

PlaceholderDescription
board.openTicketsTickets open across the server right now
board.unansweredTicketsOpen tickets nobody has replied to yet
board.unclaimedTicketsOpen tickets nobody has claimed
board.ticketsOpenedTodayTickets opened today
board.ticketsClosedTodayTickets closed today
board.ticketsOpenedLastHourTickets opened in the last hour
board.avgResponseTimeAverage time to a first reply, as a readable duration
board.ratingAverage ticket rating
board.updatedWhen the board last refreshed

Each panel you put on the board adds its own set, written as {board.panel.<panel>.openTickets} and the same for the other figures. The placeholder picker on the Status Board page lists them by panel name, so pick them from there rather than typing the panel part yourself.

The board message also accepts {emoji.<name>} for Tickety's own icons, listed in the picker under Emojis.

The board message is the one place where the base placeholders do not work. {member.mention}, {guild.name} and the statistics placeholders are left as written, because a board message is not sent to anyone in particular. Use the board.* set instead.

Welcome messages, welcome DMs and leave messages use the base placeholders, where member.* is the member who just joined or left. Welcome messages and welcome DMs also carry the milestone placeholders.

PlaceholderDescription
milestone.countThe member count this join reached
milestone.nextThe next milestone the server is heading for
milestone.remainingHow many members are still needed to reach it

milestone.count only has a value on the join that lands exactly on a milestone, so a line built around it shows up for the celebration and disappears on every other join. milestone.next and milestone.remaining resolve on every join. See Member Milestones.

Leave messages do not resolve member.joinedAt, because the member has already left by the time the message goes out. Welcome messages and DMs do not resolve member.roles.

Request placeholders are available in the DM Tickety sends when a staff member runs /request ticket or /request application.

PlaceholderDescription
request.reasonThe reason the staff member typed, if they gave one
request.staff.idRequesting staff member ID
request.staff.mentionPing the requesting staff member
request.staff.usernameRequesting staff member username
request.staff.displayNameRequesting staff member display name or nickname

The DM is read by the member being asked, so member.* is that member and the staff member who sent the request is under request.staff.*. See Ticket Request Command and Application Request Command.

Support routing placeholders are available in the messages Tickety posts when its AI ticket features point a member somewhere better.

PlaceholderDescription
supportRouting.targetChannelMentionMention of the channel the member is being pointed to
supportRouting.targetChannelIdID of that channel
supportRouting.canonicalUrlLink to the message or ticket that already covers the question

The two channel placeholders belong to the wrong channel message. supportRouting.canonicalUrl belongs to the duplicate question and duplicate ticket messages.

Rating placeholders are available in the Rating Embed posted to your rating log channel. See Ticket Ratings.

PlaceholderDescription
rating.scoreThe score the member gave, from 1 to 5
rating.starsThe same score drawn as stars
rating.feedbackThe written feedback the member left

The ticket close placeholders resolve here too, so a log entry can name the panel, the closer and the close reason alongside the score.

The dashboard placeholder picker does not offer the rating.* entries yet. Type them into the embed by hand and they work.

Roblox placeholders come from the Bloxlink integration. Connect Bloxlink under Server > Integrations and turn it on first, or every one of them resolves to nothing. See Integrations.

PlaceholderDescription
roblox.bloxlink.idRoblox account ID
roblox.bloxlink.urlLink to the Roblox profile
roblox.bloxlink.nameRoblox username
roblox.bloxlink.displayNameRoblox display name
roblox.bloxlink.aboutRoblox profile about text
roblox.bloxlink.createdAtRoblox account creation timestamp in Unix format

Once the integration is on, these resolve wherever member placeholders resolve.

A Roblox placeholder comes out empty when the integration is off, when no token is saved, or when the member has never linked a Roblox account through Bloxlink in your server. If Bloxlink cannot be reached at that moment, the placeholder renders the literal text {unavailable} instead, so that word appearing in one of your messages is not a typo on your side.

Resolution behavior

Use these rules when deciding which placeholders to include in a message:

  1. Base placeholders such as member.* and guild.* are available in most message contexts.
  2. Context-specific placeholders such as ticket.*, panel.*, and supportHours.* only resolve when that context exists.
  3. Statistics placeholders resolve to a number and fall back to 0 when data is unavailable.
  4. If a context-specific placeholder is used where that context does not exist, it may resolve to an empty value or remain unresolved depending on the message type.
  5. The status board message is the one scope that carries no base placeholders. Only board.* and emoji.* resolve there.
  6. Roblox placeholders need the Bloxlink integration connected before they return anything.

When combining placeholders with parsers, place the placeholder inside the parser payload, for example: {timestamp(relative):{member.joinedAt}}.

Parser reference

Use these parser pages for formatting, logic, and text manipulation:

ParserPurpose
DateFormat timestamps using custom date and time patterns
TimestampConvert timestamps into readable formats
String FormatChange casing, escape text, and format ordinals
ReplaceReplace characters or substrings
IfReturn one of two values from a condition
IncludesCheck whether text contains a value
JoinJoin values into a single string
SliceExtract part of a string by range
TruncateShorten text to a fixed length
PaddingPad text to a target length
NumberAdd thousands separators or shorten a number
MathRun arithmetic expressions
LogicalEvaluate boolean-style expressions
UnionReturn one of two messages when any of several conditions is true
StopPrevent further processing when a condition is met

Practical examples

Ticket notification

Ticket #{ticket.number} opened by {member.displayName} at {date(MM/DD/YYYY HH24:MI):{currentTime}}.

Support-hours status message

Support status: {upper:{supportHours.status}}
Next open: {timestamp(relative):{supportHours.nextOpen}}

Conditional message output

{if({contains(1234567890):{member.roles}}):Welcome back, staff member.|Welcome!}

Common mistakes

  • Verify context before using context-specific placeholders.
  • Keep parser syntax exact. Missing separators such as : or | can cause unexpected output.
  • Confirm timestamp format expectations before parsing. Use date or timestamp parsers when you need readable output.
  • If a value appears blank, test with a known base placeholder first, for example {member.username}, to confirm the message context is correct.

On this page