Workflows, Hiring & HRManaging Offer Templates
On this page0

Unfamiliar word? See Glossary: words used in these docs. Looking for the tasks in order? Begin at Start Here.

Reference

Included in: Team and Advanced. Which Plan Includes What

Managing Offer Templates

Write an offer letter once, with placeholders, and every offer sent from it is filled in with that candidate’s details.

Where Templates Live

Open HR & Talent › Templates (the page is headed Hiring templates) and pick the Offer letters tab (the page also has All and Interview guides). You need permission to manage recruitment to see it. From there you can create, edit, duplicate and delete templates, click a placeholder to insert it into the body, or ask the AI assistant for a first draft to edit. A Coverage for open roles table at the top shows which open roles each template covers.

Global Or Per-Job

A template can be linked to one job or left global for any job. When you post a job, a starter offer template for it is created automatically, and the AI refines it when available — review it before you use it.

Standard Terms Are Always Added

Every offer letter gets a fixed Standard Terms block appended (not a contract of employment, work-authorization and background-check contingency, equal-opportunity statement). You cannot remove it by editing the template.

Supporting Documents

Under Supporting documents & links a template can carry links, or uploaded files up to 10 MB each (PDF, image, Word, Excel, CSV or text) — a benefits summary or handbook, say. They are copied onto the offer when it is sent, so later edits to the template do not change an offer already out. The candidate sees them in the offer email and in their offer portal.

Key Terms Box Is Automatic

Every letter opens with a Key Terms box listing Position, Reporting to, Start date and the pay line, labelled Annual salary or Hourly rate to match the offer’s pay period, taken from the offer and the job (a line is left out if it has no value). It is a summary; the letter body stays the authoritative text.

How The PDF Is Rendered

  • Font. The letter is set in a standard Latin font. Western European letters (é, ü, ñ) are kept as they are. Letters outside that set that have a plain form lose their accent: Ł becomes L, ş becomes s, č becomes c.
  • Symbols. An arrow such as → becomes a hyphen and a greater-than sign, unusual hyphens become a plain hyphen, and emoji and other pictographs are dropped. A currency symbol the font lacks is shown as its ISO currency code.
  • Other scripts are refused, not guessed. If the candidate name, job title, company name or template contains text in a script the font cannot draw (Hebrew, Cyrillic, Greek, Arabic, Chinese, Japanese or Korean, for example), sending the offer is refused. Use Latin characters in those fields, or record the offer as signed outside Zonitix Sign with Mark as signed manually.

If something here is not working as you expect, start with When something goes wrong.

The plain explanation is above. This part is for IT and developers: the exact settings, permission names, API addresses and data fields behind it. Closed: select the heading above to open it. While it is closed, your browser’s find-on-page (Ctrl+F or Cmd+F) does not search this part.

Placeholders

These are the only placeholders that are filled in. Capitalisation and spaces inside the braces do not matter. Any other {{…}} token is removed when the letter is rendered to PDF — so a misspelt placeholder disappears rather than showing up raw. Use the names below exactly. What happens to [bracketed] text and to characters outside the letter’s font is under How the PDF is rendered below.

PlaceholderFilled with
{{CandidateName}}The candidate's first and last name
{{JobTitle}}The title of the job the offer is for
{{StartDate}}The start date entered on the offer
{{Salary}}The salary entered on the offer, formatted in its currency (see below)
{{ManagerName}}The job's hiring manager, or "your manager" if none is set
{{CompanyName}}Your company name from branding settings ({{Company}} works too)
{{Level}}The level entered on the offer
{{PayPeriod}}Reads as "annually" or "per hour", matching the offer's Pay period (Annual or Hourly); empty on an older offer with no pay period
{{SignOnBonus}}The sign-on bonus entered on the offer, formatted in its currency
{{TargetBonus}}The target bonus, shown as a percentage

Where the salary comes from. {{Salary}} uses the salary entered on the offer itself (stored encrypted). If none was entered, it falls back to the job’s salary-range text, and failing that to the words “as discussed”. Optional terms that were not entered (level, bonuses) resolve to nothing.

The screen is at /dashboard/recruitment/templates.

Pay period through the API. The offer form offers Annual and Hourly only. The renderer also understands a monthly period if one is stored through the API (Monthly salary, “per month”); any other stored value is labelled Base pay with the value spelled out beside the figure.

PDF Rendering: Bracketed Text And The Refusal Code

  • Bracketed text. Bracketed text containing the word “contact”, such as [Company Contact Information], becomes “our HR team”. Any other [bracketed] text is removed.
  • Unsupported script. When a field contains text in a script the font cannot draw, sending the offer is refused with HTTP 422 and the code OFFER_LETTER_UNSUPPORTED_SCRIPT.

Related reference