Scriban Template Reference¶
[Draft — pending review]
This is the complete reference for merge fields available in Ordinate message templates. Templates use the Scriban syntax: {{ Object.Property }}.
Warning
Property names are case-sensitive. Use the exact casing shown below (e.g. Meeting.Name, not MEETING.NAME).
Context Objects¶
Different templates have access to different objects depending on context. Sender, Tenant, and Event are always available.
| Object | Available when... |
|---|---|
Recipient |
A message is being sent to a person |
Person |
The message is about a specific person (may differ from Recipient in notifications) |
Meeting |
The message is in the context of a meeting |
Host |
The recipient/person has an assigned host |
Journey |
The message is in the context of a journey |
Vehicle |
The message is in the context of a vehicle |
User |
The message relates to a user account (e.g. password reset) |
Sender |
Always available — the person or system sending the message |
Event |
Always available — the current event |
Tenant |
Always available — the organisation |
Meeting¶
| Property | Description | Example |
|---|---|---|
Meeting.Name |
Meeting name | "Q1 Board Review" |
Meeting.StartTime |
Start date/time | 2024-03-15 09:00 |
Meeting.EndTime |
End date/time | 2024-03-15 17:00 |
Meeting.LocationName |
Location name | "Boardroom 1" |
Meeting.LocationZone |
Zone name | "Floor 3" |
Meeting.HostName |
Host's full name | "Jane Smith" |
Meeting.Host.Firstname |
Host first name | "Jane" |
Meeting.Host.Surname |
Host surname | "Smith" |
Meeting.Host.Email |
Host email | "[email protected]" |
Meeting.Host.Mobile |
Host mobile | "+44 7700 900000" |
Meeting.Host.Job |
Host job title | "CEO" |
Meeting.Host.Department |
Host department | "Executive" |
Meeting.Host.Company |
Host company | "Acme Ltd" |
Meeting.Controller.Firstname |
Controller first name | "Bob" |
Meeting.Controller.Surname |
Controller surname | "Jones" |
Meeting.Controller.Email |
Controller email | "[email protected]" |
Meeting.ViewUrl |
Link to view the meeting in Ordinate | URL |
Meeting.ExternalMeeting |
Whether this is an external meeting | true/false |
Meeting.ExpectedOccupants |
Expected number of attendees | 12 |
Meeting.GuestCount |
Number of guests | 8 |
Meeting.StaffCount |
Number of staff | 4 |
Meeting.HasConflicts |
Whether the recipient has calendar conflicts | true/false |
Meeting.Geo |
Geographic region | "London" |
Meeting.Industry |
Industry category | "Finance" |
Meeting.Staff |
List of staff participants (use with loops) | — |
Meeting.Guests |
List of guest participants (use with loops) | — |
Example:
Meeting: {{ Meeting.Name }}
Date: {{ Meeting.StartTime | fmt "dddd d MMMM yyyy" }}
Time: {{ Meeting.StartTime | fmt "h:mm tt" }} – {{ Meeting.EndTime | fmt "h:mm tt" }}
Where: {{ Meeting.LocationName }}
Host: {{ Meeting.HostName }}
View details: {{ Meeting.ViewUrl }}
Recipient / Person¶
Recipient is the person receiving the message. Person is the person the message is about — often the same, but they can differ (e.g. a notification telling a host about a guest's travel change).
Both have the same properties. In your templates, prefix with Recipient. or Person. as appropriate — e.g. {{ Recipient.Firstname }} or {{ Person.Surname }}.
Core Identity¶
| Property | Description | Example |
|---|---|---|
.Firstname |
First name | "Alice" |
.Surname |
Surname | "Brown" |
.Name |
Full name | "Alice Brown" |
.Title |
Title | "Dr" |
.Email |
Email address | "[email protected]" |
.Mobile |
Mobile number | "+44 7700 900123" |
.Job |
Job title | "Head of Finance" |
.Department |
Department | "Finance" |
.Company |
Company name | "Acme Ltd" |
.Country |
Country | "United Kingdom" |
.NameOnBadge |
Badge name | "Alice" |
.PersonSubType |
Person sub-type | "VIP" |
.Attending |
Whether attending | true/false |
Accommodation¶
| Property | Description |
|---|---|
.Accommodation.Hotel.Name |
Hotel name |
.Accommodation.Hotel.FullAddress |
Full formatted address |
.Accommodation.Hotel.Address1 |
Address line 1 |
.Accommodation.Hotel.Town |
Town/city |
.Accommodation.Hotel.Postcode |
Postcode |
.Accommodation.Hotel.Phone |
Hotel phone number |
.Accommodation.Hotel.Website |
Hotel website URL |
.Accommodation.Hotel.CheckInTime |
Standard check-in time |
.Accommodation.Hotel.CheckOutTime |
Standard check-out time |
.Accommodation.CheckIn |
Your check-in date |
.Accommodation.CheckOut |
Your check-out date |
.Accommodation.BillingNights |
Number of nights |
.Accommodation.RoomType.Name |
Room type name |
.Accommodation.RoomType.Currency |
Currency code |
.Accommodation.RoomType.RoomRate |
Nightly rate |
.Accommodation.RoomType.BreakfastIncluded |
Breakfast included (true/false) |
.Accommodation.EarlyCheckIn |
Early check-in requested (true/false) |
.Accommodation.LateCheckOut |
Late check-out requested (true/false) |
.Accommodation.MultipleOccupancy |
Room shared (true/false) |
.Accommodation.BookingRef |
Booking reference |
Arrival Travel¶
| Property | Description |
|---|---|
.Arrival.Carrier |
Airline name |
.Arrival.FlightNumber |
Flight number |
.Arrival.Departure |
Departure date/time |
.Arrival.Arrival |
Arrival date/time |
.Arrival.Origin |
Departure airport code |
.Arrival.Destination |
Arrival airport code |
.Arrival.OriginAirportName |
Departure airport name |
.Arrival.DestinationAirportName |
Arrival airport name |
.Arrival.TransferJourney |
Linked transfer journey (see Journey properties) |
Departure Travel¶
Same properties as Arrival, using .Departure.* instead of .Arrival.*.
Private Vehicle¶
| Property | Description |
|---|---|
.PrivateVehicle.Name |
Vehicle name |
.PrivateVehicle.Model |
Vehicle model |
.PrivateVehicle.RegNo |
Registration number |
.PrivateVehicle.AvailableFrom |
Available from date/time |
.PrivateVehicle.AvailableTo |
Available until date/time |
.PrivateVehicle.Driver.Firstname |
Driver first name |
.PrivateVehicle.Driver.Surname |
Driver surname |
.PrivateVehicle.Driver.Mobile |
Driver mobile number |
.PrivateVehicle.Notes |
Notes |
Example:
Dear {{ Recipient.Firstname }},
HOTEL
{{ Recipient.Accommodation.Hotel.Name }}
{{ Recipient.Accommodation.Hotel.FullAddress }}
Check-in: {{ Recipient.Accommodation.CheckIn | fmt "dddd d MMMM" }}
Check-out: {{ Recipient.Accommodation.CheckOut | fmt "dddd d MMMM" }}
Room: {{ Recipient.Accommodation.RoomType.Name }}
ARRIVAL FLIGHT
{{ Recipient.Arrival.Carrier }} {{ Recipient.Arrival.FlightNumber }}
Departs: {{ Recipient.Arrival.Departure | fmt "ddd d MMM, HH:mm" }} from {{ Recipient.Arrival.OriginAirportName }}
Arrives: {{ Recipient.Arrival.Arrival | fmt "ddd d MMM, HH:mm" }} at {{ Recipient.Arrival.DestinationAirportName }}
Host¶
Available when the person has an assigned host. Has core identity fields only (no accommodation or travel).
| Property | Description |
|---|---|
Host.Firstname |
First name |
Host.Surname |
Surname |
Host.Email |
Email address |
Host.Mobile |
Mobile number |
Host.Job |
Job title |
Host.Department |
Department |
Host.Company |
Company name |
Info
Host at the top level is the person's assigned host. This is separate from Meeting.Host, which is the meeting's host — they may be different people.
User¶
Available for user account notifications (e.g. welcome emails, password resets).
| Property | Description | Example |
|---|---|---|
User.UserRealName |
Full name | "Alice Brown" |
User.FirstName |
First name | "Alice" |
User.Surname |
Surname | "Brown" |
User.Username |
Username | "alice.brown" |
User.Email |
Email address | "[email protected]" |
User.LoginUrl |
Login URL for this tenant | URL |
User.NewPassword |
Newly generated password | (replaced at send time) |
User.Role |
User role | "Admin" |
Example:
Dear {{ User.UserRealName }},
Your Ordinate account details:
URL: {{ User.LoginUrl }}
Username: {{ User.Email }}
Password: {{ User.NewPassword }}
Journey¶
| Property | Description |
|---|---|
Journey.Description |
Journey description |
Journey.JourneyType |
Journey type (e.g. "Transfer") |
Journey.StartTime |
Departure time |
Journey.EndTime |
Estimated arrival time |
Journey.OriginName |
Origin location name |
Journey.DestinationName |
Destination location name |
Journey.BookingRef |
Booking reference |
Journey.StatusName |
Status text |
Journey.LeadPassenger |
Lead passenger name |
Journey.VehicleModel |
Vehicle model |
Journey.VehicleRegNo |
Vehicle registration |
Journey.Driver |
Driver first name |
Journey.DriverMobile |
Driver mobile number |
Journey.Passengers |
List of passengers (use with loops) |
Example:
TRANSFER DETAILS
From: {{ Journey.OriginName }}
To: {{ Journey.DestinationName }}
Time: {{ Journey.StartTime | fmt "dddd d MMMM, HH:mm" }}
Ref: {{ Journey.BookingRef }}
Vehicle: {{ Journey.VehicleModel }}
Registration: {{ Journey.VehicleRegNo }}
Driver: {{ Journey.Driver }}
Mobile: {{ Journey.DriverMobile }}
Vehicle¶
| Property | Description |
|---|---|
Vehicle.Name |
Vehicle name |
Vehicle.Model |
Model |
Vehicle.RegNo |
Registration number |
Vehicle.Colour |
Colour |
Vehicle.Capacity |
Passenger capacity |
Vehicle.Notes |
Notes |
Vehicle.DriverName |
Driver first name |
Vehicle.DriverMobile |
Driver mobile |
Vehicle.AssigneeName |
Reserved-for person's name |
Vehicle.AvailableFrom |
Available from date/time |
Vehicle.AvailableTo |
Available until date/time |
Sender, Event, Tenant¶
These are always available in every template.
| Property | Description |
|---|---|
Sender.Name |
Sender full name |
Sender.Firstname |
Sender first name |
Sender.Surname |
Sender surname |
Sender.Email |
Sender email |
Event.Name |
Event name |
Event.No |
Event number |
Tenant.DisplayName |
Organisation display name |
Tenant.Name |
Tenant short name |
Date and Time Formatting¶
Use the fmt filter with a .NET format string:
{{ some_date | fmt "format_string" }}
Common Format Strings¶
| Format string | Output example |
|---|---|
"d MMMM yyyy" |
15 March 2024 |
"dddd d MMMM yyyy" |
Friday 15 March 2024 |
"dd/MM/yyyy" |
15/03/2024 |
"HH:mm" |
14:30 |
"h:mm tt" |
2:30 PM |
"ddd d MMM" |
Fri 15 Mar |
"ddd d MMM, HH:mm" |
Fri 15 Mar, 14:30 |
"dddd d MMMM, h:mm tt" |
Friday 15 March, 2:30 PM |
Examples:
Date: {{ Meeting.StartTime | fmt "dddd d MMMM yyyy" }}
Time: {{ Meeting.StartTime | fmt "h:mm tt" }}
Check-in: {{ Recipient.Accommodation.CheckIn | fmt "dddd d MMMM yyyy" }}
Departure: {{ Journey.StartTime | fmt "ddd d MMM, HH:mm" }}
Boolean Formatting¶
yesno — converts to "Yes" or "No"¶
Breakfast included: {{ Recipient.Accommodation.RoomType.BreakfastIncluded | yesno }}
fmt_bool — custom text¶
{{ Recipient.Attending | fmt_bool "Attending" "Not attending" }}
{{ Meeting.ExternalMeeting | fmt_bool "External meeting" "Internal meeting" }}
Conditionals¶
Use {{ if ... }} / {{ end }} to show content only when a condition is met.
Show a section only if a value exists¶
{{ if Recipient.Accommodation }}
HOTEL: {{ Recipient.Accommodation.Hotel.Name }}
{{ end }}
If / else¶
{{ if Recipient.Accommodation.RoomType.BreakfastIncluded }}
Breakfast is included in your room rate.
{{ else }}
Breakfast is not included — it can be purchased at the hotel.
{{ end }}
Comparing values¶
{{ if Journey.StatusName == "Confirmed" }}
Your transfer is confirmed.
{{ else }}
Your transfer is pending confirmation.
{{ end }}
Multiple conditions¶
Use && (and) and || (or):
{{ if Recipient.Arrival.FlightNumber != "" && Recipient.Arrival.TransferJourney }}
A transfer has been arranged to meet your flight.
{{ end }}
Loops¶
Use {{ for item in collection }} / {{ end }} to iterate over lists.
Meeting Participants¶
The Meeting.Staff and Meeting.Guests collections contain participant objects:
| Property | Description |
|---|---|
p.Person.Firstname |
First name |
p.Person.Surname |
Surname |
p.Person.Email |
|
p.Person.Company |
Company |
p.Person.Job |
Job title |
p.ConfirmStatus |
Confirmation status |
p.Greeter |
Whether this person is a greeter (true/false) |
Example:
STAFF ATTENDING
{{ for p in Meeting.Staff }}
{{ p.Person.Firstname }} {{ p.Person.Surname }}
{{ p.Person.Job }}, {{ p.Person.Department }}
{{ end }}
GUESTS ATTENDING
{{ for p in Meeting.Guests }}
{{ p.Person.Firstname }} {{ p.Person.Surname }} ({{ p.Person.Company }})
{{ end }}
Journey Passengers¶
Passengers:
{{ for passenger in Journey.Passengers }}
• {{ passenger.Name }}
{{ end }}
Compact format¶
Use - after }} to strip trailing whitespace:
{{ for p in Meeting.Guests -}}
• {{ p.Person.Firstname }} {{ p.Person.Surname }} ({{ p.Person.Company }})
{{ end }}