Skip to main content

Recipient Messages: Like a note attached to the invite

Recipient messages let you attach a short note to participant invitations. Think of it like a post-it on a contract — great for giving context, instructions, or just a friendly message.


Understanding Recipient Messages

Recipient messages let you include a short note in the invitation email sent to agreement participants. It's useful for providing extra context, instructions, or just making the experience more human.

The message is the same for all participants, but you can localize it based on language — currently Swedish (sv-SE) and English (en-US) are supported. The message does not appear inside the signing flow — only in the invitation email.

Messages support basic Markdown formatting (like bold) and can include dynamic variables (explained below). We recommend keeping it concise — the practical limit is around 500 characters.

Language support

Recipient messages support localization for sv-SE and en-US. Each participant can have a default_locale set, which determines which language version of the message they'll receive.

If no locale is set for a participant, it falls back to the agreement’s default locale. You must have a create template for all locales required in your agreement.

If a translation is missing for a given locale, the fallback is the message that is defined


Formatting Recipient Messages

Recipient messages support a limited set of Markdown for basic formatting:

  • **bold**bold
  • *italic*italic

Line breaks and paragraphs are supported using \n\n.

Other Markdown features — like headers, images, links, or scripts — are not supported and will be stripped or ignored.

All HTML is sanitized and escaped to prevent misuse. Only Markdown is allowed.


Dynamic Variables and Context

Context data

Zigned automatically injects useful context into your message so you can personalize it for the recipient. These variables can be referenced using double curly braces, like {{recipient.name}}.

The following data is available:

  • {{agreement.filename}} – the title or filename of the agreement
  • {{agreement.test_mode}} – whether the agreement is in test mode (true/false)
  • {{agreement.issuer.name}} / {{agreement.issuer.email}} – the sender’s name and email
  • {{agreement.participant_count}} – number of participants
  • {{agreement.observer_count}} – number of observers
  • {{agreement.attachments_count}} – number of file attachments
  • {{agreement.signing_groups_count}} – number of signing groups
  • {{agreement.trust_level}} – the trust level of the agreement (e.g. low, substantial, high)
  • {{agreement.signing_order.enabled}} – whether signing order is enforced
  • {{agreement.signing_order.grouped}} – whether signing is grouped
  • {{agreement.success_callback_url}} – callback URL for success events
  • {{agreement.expires_at.date}} – The expiration date of the agreement (if set, otherwise null). Formatted as YYYY-MM-DD.
  • {{agreement.expires_at.days_until}} – The amount of days until the agreement expires. Will be null if no expiration date is set.
  • {{agreement.expires_at.weekday}} – The weekday the agreement will expire at (localized). Will be null if no expiration date is set.
  • {{agreement.expires_at.day}} – The day the agreement will expire at. Will be null if no expiration date is set.
  • {{agreement.expires_at.month}} – The month the agreement will expire (localized). Will be null if no expiration date is set.
  • {{agreement.expires_at.month_number}} – The month number the agreement will expire (localized). Will be null if no expiration date is set.
  • {{agreement.expires_at.year}} – The year the agreement will expire. Will be null if no expiration date is set.
  • {{agreement.automatic_reminders.enabled}} – whether automatic reminders is enabled for the agreement
  • {{agreement.automatic_reminders.intensity}} – the intensity of the automatic reminder schedule (e.g. intense, normal) (if set, otherwise null)

Recipient-specific data:

  • {{recipient.email}} – the email of the recipient (if set, otherwise null)
  • {{recipient.name}} – the name of the recipient (if set, otherwise null)
  • {{recipient.role}} – their role in the agreement (signer, approver, or observer (or their localized equivalents))
  • {{recipient.is_signer}} – true if they are a signer, false otherwise. Useful for conditional checks in templates.
  • {{recipient.is_approver}} – true if they are an approver, false otherwise. Useful for conditional checks in templates.
  • {{recipient.is_observer}} – true if they are an observer, false otherwise. Useful for conditional checks in templates.

Custom Variables

You can provide your own data as custom variables — useful for adding deal-specific info like reference numbers, customer IDs, or internal notes.

Each variable is a key-value pair. Keys must be strings and are automatically escaped. Values must also be strings, but they’ll be parsed as numbers or booleans if they look like it (e.g. "42" becomes 42).

You reference them the same way as built-in variables:

{{custom.order_id}} or {{custom.company_name}}

Usage

You can combine Markdown formatting and variables freely in your message. For example:

Hello {{recipient.name}},

Please review the attached agreement **carefully**.
Your order number is: {{custom.order_id}}.

Templates are parsed as Mustache logic-less templates. This means that you can use Mustache syntax to for example create conditional messages based on the recipient's role or other attributes.

{{#recipient.is_signer}}
Please sign the agreement at your earliest convenience.
{{/recipient.is_signer}}

{{#recipient.is_approver}}
You’ve been asked to approve this agreement before it moves forward.
{{/recipient.is_approver}}

{{#recipient.is_observer}}
You’re receiving this for your information only — no action is needed.
{{/recipient.is_observer}}

For more advanced examples, refer to the Mustache documentation.

Any missing variables will be replaced with an empty string. Conditions that don’t match are ignored.