Notification Templates

Changing the default Veza reminder emails and notifications.

You can use the Notification Templates API to customize the subject and body contents of emails triggered by Access Reviews events, such as notifications when reviewers are reassigned, reminders as a review due date approaches, and recurring digest emails.

Emails can trigger based on actions, deadlines, and review states (mapped to the template's usage). You can customize a template for each usage, such as when a reviewer is re-assigned, for inactivity reminders, and for periodic summaries of assigned reviews. Each usage can have a single custom template assigned to it.

This document describes the notification types that support custom templates, and the placeholders and default messages for each. See Notification Templates API for API operations and examples.

  • Templates support HTML and CSS. To use images in an email template, you can add small files as attachments, or reference an image hosted elsewhere

  • Each reminder and Orchestration Action enabled in a review configuration will trigger independently

  • Templates for each notification type can use placeholders to include snippets of text and variables

  • The template is not validated upon submission. Use the Test Email Template operation to ensure that placeholders and attachments are rendering as expected for each usage

Example request body for adding a template:

{
  "value": {
    "name": "New Review",
    "description": "Send to notify participants a new access review is available",
    "subject_template": "New access review for {{WORKFLOW_NAME}}",
    "body_template": "A review was started by {{WORKFLOW_OWNER}}, at {{WORKFLOW_CERT_STARTED_ON_TIME}}. <a href=\"{{WORKFLOW_URL}}\" rel=\"noreferrer noopener\" target=\"_blank\"> Review in Veza </a>.",
    "usage": "ACCESS_WORKFLOW_STARTED"
  }
}

Custom domains for email notifications By default, emails from Veza originate from noreply@vezacloud.com. The Veza support team can help you change this to a domain for your organization. To enable a custom domain, you will need to provide Veza with credentials for a user account with permission to send email and an email relay Veza can authenticate to.

Default notifications and usage

The built-in template for all messages uses a {{WORKFLOW_TEXT}} placeholder, representing an email body that depends on the usage.

Usage

Subject

Body

ACCESS_WORKFLOW_STARTED

"Access Workflow --> Certification: A new certification was started on workflow {{WORKFLOW_NAME}}"

"A new certification was started for workflow {{WORKFLOW_NAME}}"

ACCESS_WORKFLOW_COMPLETED

"Access Certification: A certification on workflow {{WORKFLOW_NAME}} has been completed"

"A certification has been completed on workflow {{WORKFLOW_NAME}}"

ACCESS_WORKFLOW_REVIEWER_CHANGED

"Access Certification: Assigned reviewers changed on certification for workflow {{WORKFLOW_NAME}}"

- When setting to email old reviewer: "On a certification for workflow {{WORKFLOW_NAME}} the assigned reviewers has changed from {{WORKFLOW_CERT_OLD_REVIEWERS}} to {{WORKFLOW_CERT_REVIEWERS}}." - Otherwise: "{{WORKFLOW_TEXT}}: On a certification for workflow {{WORKFLOW_NAME}} the assigned reviewers has changed to {{WORKFLOW_CERT_REVIEWERS}}."

ACCESS_WORKFLOW_OWNER_CHANGED

"Access Workflow: A new owner assigned to workflow {{WORKFLOW_OWNER}}"

"The owner of access workflow {{WORKFLOW_NAME}} has changed from {{WORKFLOW_OLD_OWNER}} to {{WORKFLOW_OWNER}}."

ACCESS_WORKFLOW_REMINDER_NO_ACTIVITY

"Access Certification Reminder: Certification has had no activity from {{WORKFLOW_CERT_LAST_ACTIVITY_REVIEWER}} {{WORKFLOW_CERT_LAST_ACTIVITY_PHASE}} on workflow {{WORKFLOW_NAME}}"

"User {{WORKFLOW_CERT_LAST_ACTIVITY_REVIEWER}} hasn't made progress on the certification started on {{WORKFLOW_CERT_STARTED_ON_DATE}} {{WORKFLOW_CERT_LAST_ACTIVITY_PHASE}}. User {{WORKFLOW_CERT_LAST_ACTIVITY_REVIEWER}} has {{WORKFLOW_CERT_LAST_ACTIVITY_ROWS_NEED_SIGN_OFF}} of {{WORKFLOW_CERT_LAST_ACTIVITY_ROWS_TOTAL}} rows that need to be signed off."

ACCESS_WORKFLOW_REMINDER_DUE

"Access Certification Reminder: Certification {{WORKFLOW_CERT_DUE_IN_PHRASE}} on workflow {{WORKFLOW_NAME}}"

"The certification started on {{WORKFLOW_CERT_STARTED_ON_DATE}} for workflow {{WORKFLOW_NAME}} {{WORKFLOW_CERT_DUE_ON_PHRASE}}."

ACCESS_WORKFLOW_ROW_ACCEPTED_AND_SIGNEDOFF

"Access Review: Access for {{REVIEW_ACCEPTED_REJECTED_ROWS_PHRASE}} was approved in {{WORKFLOW_NAME}} Review"

"In the access review {{WORKFLOW_NAME}}, access for {{REVIEW_ACCEPTED_REJECTED_ROWS_PHRASE}} was approved. Please find more details below: {{REVIEW_ACCEPTED_REJECTED_ROWS_DATA}}"

ACCESS_WORKFLOW_ROW_REJECTED_AND_SIGNEDOFF

"Access Review: Access for {{REVIEW_ACCEPTED_REJECTED_ROWS_PHRASE}} was rejected in {{WORKFLOW_NAME}} Review"

"In the access review {{WORKFLOW_NAME}}, access for {{REVIEW_ACCEPTED_REJECTED_ROWS_PHRASE}} was rejected. Please revoke the access described below: {{REVIEW_ACCEPTED_REJECTED_ROWS_DATA}}"

ACCESS_WORKFLOW_DIGEST_NOTIFICATION

"My Reviews - {{DIGEST_NOTIFICATION_PERIOD}}"

Displays a summary of in-progress access reviews for the specified time period. See Digest Notification Placeholders for more details.

Built-in templates

See the sections below for default HTML templates and placeholders:

Notification Emails

The template following template applies for all notifications, unless a custom template exists for the usage.

  • {{WORKFLOW_TEXT}} is a placeholder for default text, which varies based on the usage.

  • {{WORKFLOW_TIME}} is the time in GMT

Note that depending on how you are submitting your request, you may have to escape any double quotes " in your HTML templates for JSON compatibility, for example:

<html>
 <head>
 <meta charset=\"UTF-8\" />
 </head>
</html>
<html>
    <head>
   <meta charset="UTF-8" />
   <title>Notification</title>
   <meta http-equiv="Content-Type" content="text/html charset=UTF-8" />
   <meta name="viewport" content="width=device-width,initial-scale=1" />
   <meta name="x-apple-disable-message-reformatting" />
   <style>
     * {
       font-family: Roboto, Arial, sans-serif;
     }
     body {
       padding: 0;
       margin: 0;
     }
     table {
       border: 0;
       width: 100%;
       border-spacing: 0;
     }
     table tr td {
       padding: 0;
     }
     .timestamp {
       color: #9097ad;
       font-size: 12px;
       line-height: 14px;
       padding-bottom: 5px;
     }
     .notification-text {
       font-size: 14px;
       line-height: 16px;
       color: #263040;
       padding-bottom: 30px;
     }
     .view-in-link a {
       text-decoration: none;
       background: #933aeb;
       border-radius: 10px;
       color: #ffffff;
       font-size: 14px;
       line-height: 16px;
       padding: 15px 35px;
       display: inline-block;
       font-weight: 500;
     }
     .ExternalClass {
       width: 100%;
     }
   </style>
 </head>
    <body style="padding: 0;">
     <table style="margin: 0; padding: 24px !important;">
       <tr style="margin: 0; padding: 0;">
         <th style="margin: 0; padding: 0 0 24px 0; text-align: left">
           <img src="cid:vezaLogo" style="width: 75px; display:inline-block;" alt="Veza logo" />
         </th>
       </tr>
       <tr>
         <td class="timestamp">{{WORKFLOW_TIME}}</td>
       </tr>
       <tr>
         <td class="notification-text">{{WORKFLOW_TEXT}}</td>
       </tr>
       <tr>
         <td class="view-in-link">
           <a href="{{WORKFLOW_URL}}" rel="noreferrer noopener" target="_blank"> View in Veza </a>
         </td>
       </tr>
     </table>
   </body>
</html>
Digest Emails

The following template is used by default for Digest Notification emails:

<!DOCTYPE html>
<html lang="en">
   <head>
      <title> Access Reviews Digest </title>
   </head>
   <body style="
      padding: 50px 5px 0px 50px;
      font-family: Arial, sans-serif;
      text-align: center;
      background-color: #f1efef;">

      <img src="cid:` + email.VezaLogo + `" alt="Veza Logo" style="padding: 20px;">

      <!-- Table Container -->
      <div style="
         max-width: 750px;
         margin: auto;
         padding: 15px 0 15px;
         background-color: white;
         border-radius: 10px;
         ">

         <!-- Table Header -->
         <div>
            <div style="font-size: 28px; color: black; margin: 2px; font-weight:600;"> My Reviews </div>
            <span style="font-size: 22px; color: black; font-weight: 600;"> {{DIGEST_NOTIFICATION_PERIOD}} </span>
         </div>

         <!-- Table -->
         {{DIGEST_NOTIFICATION_TABLE}}

         <a href="{{ACCESS_REVIEW_URL}}">
            <button style="
               display: inline-block;
               background-color: #3c7bfa;
               color: white;
               border: none;
               border-radius: 7.5px;
               font-size: 18px;
               cursor: pointer;
               text-align: center;
               line-height: 1.5em;
               padding: 12px 14px;
               font-weight: 400;
               ">
               Go to My Reviews
            </button>
         </a>
      </div>


      <div style="
         font-size: 16px;
         color: #666;
         padding-top: 20px;
         padding: 10px 10px;">
         Copyright © 2024 Veza.
      </div>

      <div style="
         font-size: 16px;
         color: #666;
         padding: 10px;
         padding-bottom: 50px;">
         To manage notifications, visit
         <a href="{{SETTINGS_URL}}" style="color: #3c7bfa;"> settings </a>
      </div>
   </body>
</html>

Image attachments

Small images under 64kb can be attached when configuring a template.

The image must be base64-encoded and specified in the attachments field of the API request.

To use an attachment you have uploaded in a template, specify it by attachment.name, for example:

<img src="cid:<name_of_attachment>"

To embed high-resolution images in your templates, you should serve the content from a public URL, and use HTML to link and style it.

Placeholders

Use placeholders to include dynamic information in templates, such as decision timestamps, reviewer names, and other review or configuration metadata. Some placeholders are available depending on the template usage, and some are available for all templates, such as {{WORKFLOW_NAME}} and {{WORKFLOW_URL}}.

Placeholders for all templates

Summary

Placeholder

Configuration Name

{{WORKFLOW_NAME}}

Configuration Text

{{WORKFLOW_TEXT}}

Configuration URL

{{WORKFLOW_URL}}

Configuration Time

{{WORKFLOW_TIME}}

Configuration Owner

{{WORKFLOW_OWNER}}

Configuration Description

{{WORKFLOW_DESCRIPTION}}

If a review (certification) exists for a configuration (workflow), the following placeholders are available:

Summary

Placeholder

Review Due On Date

{{WORKFLOW_CERT_DUE_ON_DATE}}

Review Last Activity On Date

{{WORKFLOW_CERT_LAST_ACTIVITY_ON_DATE}}

Review Last Activity On Time

{{WORKFLOW_CERT_LAST_ACTIVITY_ON_TIME}}

Review Last Activity By

{{WORKFLOW_CERT_LAST_ACTIVITY_BY}}

Review Last Updated On

{{WORKFLOW_CERT_LAST_UPDATED_ON_DATE}}

Review Last Updated On Full

{{WORKFLOW_CERT_LAST_UPDATED_ON_TIME}}

Review Last Updated By

{{WORKFLOW_CERT_LAST_UPDATED_BY}}

Review Started On Date

{{WORKFLOW_CERT_STARTED_ON_DATE}}

Review Started On Time

{{WORKFLOW_CERT_STARTED_ON_TIME}}

Review Created By

{{WORKFLOW_CERT_CREATED_BY}}

Review Completed On Date

{{WORKFLOW_CERT_COMPLETED_ON_DATE}}

Review Completed On Time

{{WORKFLOW_CERT_COMPLETED_ON_TIME}}

Review Completed By

{{WORKFLOW_CERT_COMPLETED_BY}}

Review Phrase

{{WORKFLOW_CERT_PHRASE}}

Dates and Times: For placeholders that refer to a timestamp, you can show the full "Time" or simple "Date" format:

  • {{WORKFLOW_CERT_STARTED_ON_TIME}} result: "Mon, Jan 2nd 2006, 3:04:05PM"

  • {{WORKFLOW_CERT_STARTED_ON_DATE}} result: "2006-01-02"

Digest notification placeholders

Unique placeholders are available for the ACCESS_WORKFLOW_DIGEST_NOTIFICATION usage:

Placeholder

Description

{{DIGEST_NOTIFICATION_PERIOD}}

The time period covered by the digest (e.g., "January 1 - January 7, 2024")

{{ACCESS_REVIEW_URL}}

Link to the Access Reviews overview (varies based on user role)

{{SETTINGS_URL}}

Link to the Access Review settings page where digest emails can be configured. Only admins and operators can view this page.

{{DIGEST_NOTIFICATION_TABLE}}

Formatted HTML table showing in-progress reviews.

The {{DIGEST_NOTIFICATION_TABLE}} placeholder generates a tabular summary of assigned reviews, including the:

  • Review name and link to the review

  • Due date (if applicable)

  • Total items needing review

  • Status indicators (e.g., New, Overdue)

DIGEST_NOTIFICATION_TABLE Raw HTML

The DIGEST_NOTIFICATION_TABLE placeholder translates to the following HTML table:

<!-- Table -->
<table style="
   border-collapse: collapse;
   width: 90%;
   margin: 20px auto;
   ">
   {{ range .Certifications }}
   <tr style="
      padding: 10px;
      ">
      <!-- Left Aligned -->
      <td style="text-align: left; padding: 10px;">
         <a href="{{ .CertUrl }}"
            style="
            text-decoration: none;
            color: #3c7bfa;
            font-size: 20px;
            font-weight: bold;">
            <span style="
               font-size: 20px;
               font-weight: bold;
               color: #3c7bfa;">
               {{ .CertName }}
            </span> <br>
            {{ if .DueDate }}
               <span style="
                  font-size: 15px;
                  font-weight: bold;
                  color: #666;
                  ">
                  Due {{ .DueDate }}
               </span>
            {{ end }}
         </a>
      </td>

      <!-- Right Aligned -->
      <td style="text-align: right; padding: 10px;">
         <a href="{{ .CertUrl }}"
            style="
            text-decoration: none;
            color: #3c7bfa;
            font-size: 20px;
            font-weight: bold;">
            <button style ="
               background-color: #d4d4d4;
               border: none;
               color: #666;
               padding: 6px 15px;
               text-align: center;
               margin: 2px 5px;
               cursor: pointer;
               font-size: 16px;
               border-radius: 31px;">
               {{ .WorkLeft }} need review
            </button>
            {{ if .Overdue }}
            <button style="
               background-color: #f7b5b5;
               border: none;
               color: #666;
               padding: 6px 15px;
               text-align: center;
               margin: 2px 5px;
               cursor: pointer;
               font-size: 16px;
               border-radius: 31px;
               ">
               Overdue
            </button>
            {{ else if .New }}
            <button style="
               background-color: aquamarine;
               border: none;
               color: #666;
               padding: 6px 15px;
               text-align: center;
               margin: 2px 5px;
               cursor: pointer;
               font-size: 16px;
               border-radius: 31px;">
               New
            </button>
            {{ end }}
         </a>
      </td>
   </tr>
   {{ end }}
</table>

ACCESS_WORKFLOW_OWNER_CHANGED placeholders

Summary

Placeholder

Workflow Old Owner

{{WORKFLOW_OLD_OWNER}}

ACCESS_WORKFLOW_REMINDER_NO_ACTIVITY placeholders

Summary

Placeholder

Review Last Activity Days

{{WORKFLOW_CERT_LAST_ACTIVITY_DAYS}}

Review Last Activity Phrase

{{WORKFLOW_CERT_LAST_ACTIVITY_PHASE}}

Review Last Activity Reviewer

{{WORKFLOW_CERT_LAST_ACTIVITY_REVIEWER}}

Review Last Activity Rows Total

{{WORKFLOW_CERT_LAST_ACTIVITY_ROWS_TOTAL}}

Review Last Activity Rows Need Sign Off

{{WORKFLOW_CERT_LAST_ACTIVITY_ROWS_NEED_SIGN_OFF}}

Review Last Activity Rows Signed Off

{{WORKFLOW_CERT_LAST_ACTIVITY_ROWS_SIGNED_OFF}}

ACCESS_WORKFLOW_REMINDER placeholders

Summary

Placeholder

Review Due In Phrase

{{WORKFLOW_CERT_DUE_IN_PHRASE}}

Review Due Date Phrase

{{WORKFLOW_CERT_DUE_ON_PHRASE}}

Review Due Days

{{WORKFLOW_CERT_DUE_DAYS}}

ACCESS_WORKFLOW_REVIEWER_CHANGED placeholders

Summary

Placeholder

Review Old Reviewers

{{WORKFLOW_CERT_OLD_REVIEWERS}}

Review Current Reviewers

{{WORKFLOW_CERT_REVIEWERS}}

Placeholders: Rejected and Accepted Rows

Usages ACCESS_WORKFLOW_ROW_ACCEPTED_AND_SIGNEDOFF and ACCESS_WORKFLOW_ROW_REJECTED_AND_SIGNEDOFF have unique placeholders:

Summary

Placeholder

Number of impacted rows

{{REVIEW_ACCEPTED_REJECTED_ROWS_PHRASE}}

List of approved or rejected rows

{{REVIEW_ACCEPTED_REJECTED_ROWS_DATA}}

List of approved or rejected rows, including notes

{{REVIEW_ACCEPTED_REJECTED_ROWS_DATA_WITH_NOTES}}

Examples:

Number of impacted rows:

"2 rows" | "1 row" | "x rows"

List of approved or rejected rows:

<p>[Result Id 1] From srcType1 "SrcName1" (srcId1) to destType1 "destName1" (destId1)</p>
<p>[Result Id 2] From srcType2 "SrcName2" (srcId2) to destType2 "destName2" (destId2)</p>

List of approved or rejected rows, including notes:

<p>[Result Id 1] From srcType1 "SrcName1" (srcId1) to destType1 "destName1" (destId1) because of "reason 1"</p>
<p>[Result Id 2] From srcType2 "SrcName2" (srcId2) to destType2 "destName2" (destId2) because of "reason 1"</p>

When including notes, rows approved or rejected without a note will fall back to:

<p>[Result Id 1] From srcType1 "SrcName1" (srcId1) to destType1 "destName1" (destId1)</p>

Placeholders: Phrases

Some placeholders represent a collection of strings and variables and are used to construct the default messages:

Phrase

Default Message

{{ACCESS_WORKFLOW_STARTED_PHRASE}}

"Access Workflow --> Certification: A new certification was started on workflow {{WORKFLOW_NAME}}"

{{ACCESS_WORKFLOW_COMPLETED_PHRASE}}

"Access Certification: A certification on workflow {{WORKFLOW_NAME}} has been completed"

{{ACCESS_WORKFLOW_REVIEWER_CHANGED_PHRASE}}

"Access Workflow: A new owner assigned to workflow {{WORKFLOW_NAME}}"

{{ACCESS_WORKFLOW_OWNER_CHANGED_PHRASE}}

"Access Certification Reminder: Certification has had no activity from {{WORKFLOW_CERT_LAST_ACTIVITY_REVIEWER}} {{WORKFLOW_CERT_LAST_ACTIVITY_PHASE}} on workflow {{WORKFLOW_NAME}}"

{{ACCESS_WORKFLOW_REMINDER_NO_ACTIVITY_PHRASE}}

"Access Certification Reminder: Certification has had no activity from {{WORKFLOW_CERT_LAST_ACTIVITY_REVIEWER}} {{WORKFLOW_CERT_LAST_ACTIVITY_PHASE}} on workflow {{WORKFLOW_NAME}}"

{{ACCESS_WORKFLOW_REMINDER_DUE_PHRASE}}

"Access Certification Reminder: Certification {{WORKFLOW_CERT_DUE_IN_PHRASE}} on workflow {{WORKFLOW_NAME}}"

{{WORKFLOW_CERT_DUE_IN_PHRASE}}

"is due on {{WORKFLOW_CERT_DUE_ON_DATE}}" (if future) "was due on {{WORKFLOW_CERT_DUE_ON_DATE}}" (if past)

{{WORKFLOW_CERT_LAST_ACTIVITY_PHASE}}

"for {{WORKFLOW_CERT_LAST_ACTIVITY_DAYS}} day" (if singular) "for {{WORKFLOW_CERT_LAST_ACTIVITY_DAYS}} days" (if plural)

Last updated