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

# Templates

> Set up a preflight checklist once per experience or rate, and have it auto-create on every new booking

export const PriorityLabel = ({level, showLabel = true}) => {
  let label = "";
  let color = "";
  let svg = null;
  switch (level) {
    case "none":
      label = "None";
      color = "#71717a";
      svg = <svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" style={{
        width: "1em",
        height: "1em",
        flexShrink: 0
      }}>
          <rect x="2" y="10.75" width="5" height="2.5" rx="1.25" fill="currentColor" />
          <rect x="9.5" y="10.75" width="5" height="2.5" rx="1.25" fill="currentColor" />
          <rect x="17" y="10.75" width="5" height="2.5" rx="1.25" fill="currentColor" />
        </svg>;
      break;
    case "low":
      label = "Low";
      color = "#71717a";
      svg = <svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" style={{
        width: "1em",
        height: "1em",
        flexShrink: 0
      }}>
          <rect x="2" y="14.5" width="5" height="7.5" rx="1.5625" fill="currentColor" />
          <rect x="9.5" y="8.25" width="5" height="13.75" rx="1.5625" fill="currentColor" opacity="0.2" />
          <rect x="17" y="2" width="5" height="20" rx="1.5625" fill="currentColor" opacity="0.2" />
        </svg>;
      break;
    case "medium":
      label = "Medium";
      color = "#3f3f46";
      svg = <svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" style={{
        width: "1em",
        height: "1em",
        flexShrink: 0
      }}>
          <rect x="2" y="14.5" width="5" height="7.5" rx="1.5625" fill="currentColor" />
          <rect x="9.5" y="8.25" width="5" height="13.75" rx="1.5625" fill="currentColor" />
          <rect x="17" y="2" width="5" height="20" rx="1.5625" fill="currentColor" opacity="0.2" />
        </svg>;
      break;
    case "high":
      label = "High";
      color = "#d97706";
      svg = <svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" style={{
        width: "1em",
        height: "1em",
        flexShrink: 0
      }}>
          <rect x="2" y="14.5" width="5" height="7.5" rx="1.5625" fill="currentColor" />
          <rect x="9.5" y="8.25" width="5" height="13.75" rx="1.5625" fill="currentColor" />
          <rect x="17" y="2" width="5" height="20" rx="1.5625" fill="currentColor" />
        </svg>;
      break;
    case "urgent":
      label = "Urgent";
      color = "#dc2626";
      svg = <svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" style={{
        width: "1em",
        height: "1em",
        flexShrink: 0
      }}>
          <path d="M20 2C21.1046 2 22 2.89543 22 4V20C22 20.8629 20.8629 22 20 22H4C3.13706 22 2 20.8629 2 20V4C2 3.13706 3.13706 2 4 2H20ZM12.0281 15.6206C11.3225 15.6206 10.75 16.1919 10.75 16.8975C10.75 17.603 11.3225 18.1755 12.0281 18.1755H12.0623C12.7678 18.1755 13.3403 17.603 13.3403 16.8975C13.3403 16.1919 12.7678 15.6206 12.0623 15.6206H12.0281ZM12.0452 5.75C11.3976 5.75 10.8721 6.27554 10.8721 6.9231V9.40723C10.8721 10.6387 11.04 12.0024 11.1772 13.2793C11.225 13.7231 11.5988 14.063 12.0452 14.063C12.4914 14.0629 12.8641 13.723 12.9119 13.2793C13.0491 12.0024 13.217 10.6387 13.217 9.40723V6.9231C13.217 6.2756 12.6926 5.75009 12.0452 5.75Z" fill="currentColor" />
        </svg>;
      break;
    default:
      return null;
  }
  return <span style={{
    display: "inline-flex",
    alignItems: "center",
    gap: "0.25em",
    verticalAlign: "middle",
    lineHeight: 1,
    color,
    marginTop: "-2px",
    fontWeight: 500
  }}>
      {svg}
      {showLabel && <span style={{
    color: "inherit"
  }}>{label}</span>}
    </span>;
};

## What are templates?

Templates are the pre-built checklists that get copied onto every new booking of an experience. If the same five things need to happen before every Morning Walking Tour departs — confirm the pickup, print the pax list, assign a guide, call the client, review the pickup stop — you set them up once, on the Morning Walking Tour experience, and Helm recreates them automatically on each new booking.

Think of templates as "the recipe," and action items on an event as "the meal" — the recipe stays the same, each meal is its own thing you can season differently.

## Where templates live

Templates are organization-wide. You set them up under **Settings → Organization → Experiences**, in the **Action item templates** section.

Each template has a name, a list of item rows, and one or more **assignments** that tell Helm which experiences or rates it applies to.

## Creating a template

<Steps>
  <Step title="Go to Settings → Organization → Experiences">
    Scroll to the Action item templates section and click **New template**.
  </Step>

  <Step title="Give it a name">
    Something that makes sense to your team — "Morning walking tour checklist,"
    "Private transfer prep," "VIP client handling." The name is internal
    organization, not something customers ever see.
  </Step>

  <Step title="Add item rows">
    Each row is one item that'll get created on new bookings. Fill in as much
    or as little as you like; you can leave almost every field empty and still
    have a useful item.
  </Step>

  <Step title="Assign it">
    Link the template to one or more **experiences** or **rates** (see
    [Where it applies](#where-it-applies) below). Without at least one
    assignment, the template won't fire on any booking.
  </Step>

  <Step title="Save">
    The template is now live. The next booking of the matching experience or
    rate will get a fresh copy of every item in the template.
  </Step>
</Steps>

## What's on a template item

Templates mirror action items but without a specific date — they describe the task in general terms, and Helm fills in the booking-specific details when it creates each copy.

<AccordionGroup>
  <Accordion title="Title">
    Required. The short name that'll be copied verbatim to every generated
    item.
  </Accordion>

  <Accordion title="Description">
    Optional rich-text block copied to every generated item. Good for
    instructions that apply to every booking.
  </Accordion>

  <Accordion title="Priority">
    Sets the starting priority on every generated item, from <PriorityLabel level="none" /> to <PriorityLabel level="urgent" />.
  </Accordion>

  <Accordion title="Default assignees">
    Teammates who get assigned automatically on every generated item. Useful
    for "always assign the ticketing task to Célia," "all pickup calls go to
    whoever's on the ops desk." Assignees still show up as subscribers on the
    item and get notified according to their preferences.
  </Accordion>

  <Accordion title="Labels">
    Tags that get applied automatically on every generated item. Labels on
    the template use the same set your organization defines — create and
    manage them once, reuse everywhere.
  </Accordion>

  <Accordion title="Due date offset">
    A number of days relative to the booking's start time. A template item with
    an offset of "3 days before" becomes an action item due 3 days before the
    tour departs. An offset of "1 day after" sets the item's due date to the
    day after the booking. Leave it empty if the item doesn't have a deadline.
  </Accordion>
</AccordionGroup>

## Where it applies

A template has one or more **assignments**, each pointing at either an experience or a specific rate of an experience.

* **Assign to an experience** — the template fires on every booking of that experience, regardless of which rate was chosen.
* **Assign to a specific rate** — the template fires only on bookings of that rate, not the experience's other rates.

Use rate-level assignments when a particular rate has different operational needs than the rest — for example, a "Private" rate that requires a guide confirmation call the experience's "Group" rate doesn't.

<Note>
  A single template can be assigned to several experiences and rates at once.
  Mixing is fine: one template can be wired up to "Morning Walking Tour" as
  a whole AND to "Sunset Cruise — Private" as a specific rate.
</Note>

## What happens on a new booking

When a new booking comes in — whether it was created manually in Helm, imported from Bokun or WooCommerce, or pushed in by some other integration — Helm:

1. Looks at the booking's experience and rate
2. Finds every enabled template assigned to either of those
3. Creates one action item per row in each matching template, with the right assignees, labels, priority, and due date filled in

If two templates match the same booking, both fire and you'll get items from both. Duplicates aren't deduplicated — if you have the same title in two templates, you'll see it twice.

<Tip>
  If your templates typically assign several items to the same person, you
  (or that person) probably want the
  [new booking summary](/features/preflight/action-items/notifications#new-booking-summary)
  turned on — it replaces the flood of "you were assigned" notifications
  with a single "here's what came in on this booking" message.
</Tip>

## Applying a template to an existing booking

Templates usually fire on new bookings, but you can also apply one manually to a booking that already exists.

Open the event, find the action items section, and click the **Apply template** button. Pick a template and Helm will generate its items on the event, just like it would have on a new booking.

This is useful for bookings that pre-date a new template (the template didn't exist when they came in), or for one-off situations where a specific template suddenly applies ("this VIP booking needs the full VIP checklist even though it was booked under a regular rate").

## Enabling and disabling templates

Each template has an on/off switch in the templates panel. Turning a template off stops it from firing on new bookings, but **doesn't affect items it has already created** — those remain as normal action items on their bookings.

Re-enable it later and it resumes firing on new bookings.

<Tip>
  Disable rather than delete when you're pausing a template temporarily or
  testing how the workflow runs without it. Deleting is permanent and means
  rebuilding from scratch if you want it back.
</Tip>

## Editing items after they're created

Items created from a template are just regular action items once they exist. You can edit their title, change the due date, reassign them, add labels, mark them done — everything works the same way.

Editing a template does **not** change items that have already been created from it. The template only decides what happens on future bookings.

## The "Requires tickets" checkbox

On each rate's settings, there's a separate **Requires tickets** checkbox. It's not part of the template system — instead, it tells [Triage](/features/preflight/triage) to watch runs on that rate for missing ticket uploads.

If you're looking for "auto-create a ticket-management task on every booking," a template is the right tool. If you're looking for "flag every booking that hasn't had its ticket uploaded yet," the Requires tickets checkbox is — see the [missing tickets signal](/features/preflight/triage/signals#missing-tickets).
