Letter templates

List placeholders

Returns the placeholders you may write into a template for a given kind of recipient. Ask for more than one and you get only the placeholders all of them share, which is exactly the set a template addressed to all of them is allowed to use.

GET
https://services.magicdoor.com/communications/company-portal/letter-templates/placeholders

Authorization

Authorizationstringrequired
Bearer token — Send your API token in the Authorization header as Bearer <token>. Requests without a valid token are rejected with 401 Unauthorized.

Query parameters

channelsenum<string>[]required

The kinds of recipient you are writing for. Repeat the parameter for more than one value, for example ?channels=tenant&channels=lease. Leave it out and you get an empty list — this endpoint has no default.

example: leasetenantownervendorleasemaintenanceRequestworkOrderrentalApplicationpropertyManagercompany

Response

200 · The placeholders available to every channel that was asked for.

itemsPlaceholder[]required

The placeholders, in the order the first channel lists them. Empty when no channels were given.

401 · The access token is missing, expired, or not a property-manager token.

Template content is Handlebars. A placeholder is its key in double braces, and it can appear anywhere in the email subject, the email body, or the chat content.

Email body
<p>Hi {{first_name}},</p>
<p>Rent for {{unit_address}} is {{rent_amount}} and is due on {{next_rent_due_date}}.</p>
<p>{{company_name}} · {{company_phone}}</p>

Three placeholders are computed from the moment the message is sent rather than read off a record — send_date, next_rent_due_date and current_rent_period. Each takes an optional .NET date format string as an argument.

Formatting a date
{{send_date}}                 renders as  Aug 17, 2026
{{send_date "d MMMM yyyy"}}    renders as  17 August 2026
{{current_rent_period}}       renders as  August 2026

A placeholder that is not on the list for the channels you named makes Create and Update fail with a 400. Check content up front with Validate placeholders.

These are the sets this endpoint returns. Every channel below also offers the shared company placeholders listed at the end.

ChannelPlaceholders on top of the shared set
tenantname, names, first_name, last_name, email, phone, address
ownername, names, first_name, last_name, email, phone, address
vendorname, names, first_name, email, phone, address
leasename, names, first_name, lease_start, lease_end, rent_amount, balance, unit_name, property_name, property_address, unit_address, move_in_date, move_out_date, last_payment_date, past_due_date, security_deposit_held, security_deposit_required, bedrooms, bathrooms, square_feet, market_rent, next_rent_due_date, current_rent_period
maintenanceRequestname, names, title, description, status, urgency, unit_name, property_name, property_address, due_date
workOrdername, names, title, description, status, urgency, reference, unit_name, property_name, property_address, due_date, vendor_name, approval_limit, tenant_contacts
rentalApplicationname, names, first_name, last_name, email, phone, status, unit_name, property_name, property_address, move_in_date
propertyManagerpm_name, first_name, last_name, email, phone — and no portal_link
companynothing beyond the shared set, and no portal_link

The shared set, offered by every channel: company_name, company_email, company_phone, company_address, property_manager_name, property_manager_phone, send_date, and portal_link. portal_link points at the recipient's own portal, so the propertyManager and company channels — which have no single recipient — do not offer it.