Skip to content
Vulnotes LogoVulnotes
Variables

Variables

This page lists all variables available in templates. These variables are populated from your report data when rendering or exporting.

report

General report metadata.

VariableTypeDescription
report.titlestringReport title
report.statusstringdraft, waiting-for-review, under-review, completed
report.languagestringLanguage code (e.g. EN, FR)
report.versionstringReport version (e.g. 1.0.0)
report.executiveSummaryHTMLExecutive summary content
report.createdAtdateCreation date
report.updatedAtdateLast update date

Authors & reviewers

VariableTypeDescription
report.authorobjectPrimary author
report.author.namestringFull name
report.author.emailstringEmail
report.author.firstNamestringFirst name
report.author.lastNamestringLast name
report.authorsarrayAll authors
report.coAuthorsarrayCo-authors
report.reviewerobjectReviewer who accepted the review
report.reviewersarrayAll reviewers

Each entry in authors, coAuthors, and reviewers has the same fields as report.author.

liquid
Author: {{ report.author.name }}

{% if report.coAuthors.size > 0 %}
  Co-authors:
  {% for author in report.coAuthors %}
    {{ author.name }} ({{ author.email }})
  {% endfor %}
{% endif %}

client

The company/client associated with the report.

VariableTypeDescription
client.namestringCompany name
client.logostringLogo URL
client.primaryContactobjectMain contact
client.primaryContact.namestringFull name
client.primaryContact.emailstringEmail
client.primaryContact.phonestringPhone
client.primaryContact.rolestringRole / job title
client.contactsarrayContacts on the linked company

Each entry in client.contacts:

VariableTypeDescription
firstNamestringFirst name
lastNamestringLast name
emailstringEmail
phonestringPhone
rolestringRole / job title
liquid
Prepared for: {{ client.name }}

{% for contact in client.contacts %}
  {{ contact.firstName }} {{ contact.lastName }}, {{ contact.role }}, {{ contact.email }}
{% endfor %}

TIP

The client logo can be inserted as an image element through the visual editor. Use the variable client.logo as the image source.

dates

VariableTypeDescription
dates.startDatestringAssessment start date (YYYY-MM-DD)
dates.endDatestringAssessment end date (YYYY-MM-DD)
dates.currentDatestringCurrent date at render time (YYYY-MM-DD)
dates.createdAtstringReport creation date (YYYY-MM-DD)
liquid
Assessment period: {{ dates.startDate | formatDate: 'long' }} – {{ dates.endDate | formatDate: 'long' }}

scope

The assessment scope defined in the report.

VariableTypeDescription
scope.descriptionstringScope description
scope.entriesarrayScope entries

Each entry in scope.entries:

VariableTypeDescription
typestringip, url, or other
namestringEntry label
valuestringEntry value
liquid
{% if scope.description != blank %}
  {{ scope.description }}
{% endif %}

{% for entry in scope.entries %}
  {{ entry.type | uppercase }}: {{ entry.name }}, {{ entry.value }}
{% endfor %}

TIP

Scope entries are best displayed using a table element in the visual editor with a row loop. See the Table documentation.

stats

Vulnerability count statistics.

VariableTypeDescription
stats.totalVulnerabilitiesnumberTotal findings
stats.criticalCountnumberCritical count
stats.highCountnumberHigh count
stats.mediumCountnumberMedium count
stats.lowCountnumberLow count
stats.informativeCountnumberInformational count
liquid
Critical: {{ stats.criticalCount }}
High: {{ stats.highCount }}
Medium: {{ stats.mediumCount }}
Low: {{ stats.lowCount }}
Informational: {{ stats.informativeCount }}
Total: {{ stats.totalVulnerabilities }}

TIP

Statistics are best displayed using a table element in the visual editor. You can use cell background colors to match severity levels.

vulnerabilities

Array of all findings in the report. Each vulnerability contains:

Core fields

VariableTypeDescription
titlestringVulnerability title
severitystringCritical, High, Medium, Low, Info
statusstringFinding status
templateNamestringName of the vulnerability template this finding was created from. Useful when the report uses more than one vulnerability template; see Filtering by vulnerability template.

CVSS

Available when the vulnerability template includes a CVSS field.

VariableTypeDescription
cvss.scorestringFinal score; for v3.1, prefers environmental, then temporal, then base
cvss.severitystringSeverity label for the final score
cvss.baseScorestringBase score
cvss.baseSeveritystringBase severity
cvss.vectorstringCVSS vector string
cvss.temporalScorestringTemporal score (if enabled)
cvss.temporalSeveritystringTemporal severity
cvss.environmentalScorestringEnvironmental score (if enabled)
cvss.environmentalSeveritystringEnvironmental severity

CVSS v3.1 base metrics: cvss.AV, cvss.AC, cvss.PR, cvss.UI, cvss.S, cvss.C, cvss.I, cvss.A.

CVSS v4.0 uses cvss.AT, cvss.VC, cvss.VI, cvss.VA, cvss.SC, cvss.SI, and cvss.SA alongside AV, AC, PR, and UI. Metric values are expanded to readable labels. For v4.0, use cvss.score and cvss.severity; separate temporal and environmental score fields are empty.

Custom score

Available when the vulnerability template includes a custom score field.

VariableTypeDescription
customScore.scorenumberCalculated score
customScore.maxScorenumberMaximum possible score
customScore.criteriaValuesobjectIndividual criteria scores
customScore.severitystringLabel for the score band
customScore.colorstringColor for the score band
customScore.displayScorestringScore formatted with the configured precision
customScore.criteriaobjectSelected option labels, keyed by criterion ID

customScore refers to the first custom score field. When a template has several, use each field's own variable, such as vuln.business_risk.score. Copy its name from the variable browser.

Custom fields

Fields are available by their stored field ID and by the name shown in the variable browser. Names are converted to lowercase with underscores, so Remediation Complexity becomes remediation_complexity. Inside a loop, use the loop variable:

liquid
{% for vuln in vulnerabilities %}
  {{ vuln.description }}
  {{ vuln.remediation }}
  {{ vuln.impact }}
{% endfor %}

The available field names depend on your vulnerability template configuration. Multilingual fields automatically resolve to the report's language.

Looping examples

liquid
{% for vuln in vulnerabilities %}
  {{ forloop.index }}. {{ vuln.title }}
  Severity: {{ vuln.severity }}, CVSS: {{ vuln.cvss.score | score }}
  {{ vuln.description }}

  {% if vuln.remediation != blank %}
    Remediation:
    {{ vuln.remediation }}
  {% endif %}

  {% unless forloop.last %}{% pagebreak %}{% endunless %}
{% endfor %}

custom

Report-level custom variables defined in the template. Variable keys use dot-notation that gets converted to a nested structure.

For example, if your template defines variables with keys custom.introduction, custom.methodology.description, and custom.methodology.tools, they are accessible as:

liquid
{{ custom.introduction }}
{{ custom.methodology.description }}
{{ custom.methodology.tools }}

Rich text variables contain formatted content; simple text variables contain a plain value. Only variables declared on the selected template are available when rendering.

killchain

The killchain array contains findings included in the kill chain, ordered by step. Findings grouped together share the same step value.

FieldDescription
stepStep number, starting at 1
idFinding ID
titleFinding title in the report language
severityNormalized severity name
severityColorSeverity color
noteStep description in the report language

Use the visual Kill Chain element for the standard diagram. These variables are available if you need a custom text or table layout.