Assets Service
Last updated: September 14, 2026
This service provides integration for exporting assets and sending emails.
REST API docs: https://spotlight.pages.spotlight.ai/back-end/assets-service/
See more info in [Wiki](https://code.spotlight.ai/spotlight/back-end/assets-service/-/wikis/Asset-Types-Overview)
## Placeholders
Placeholders are {{...}} tokens that get replaced with live deal data when a PPTX, Google
Slides, Excel, or Google Sheets asset is generated. They are resolved by
[`PlaceholderService`](src/main/java/com/spai/assets/service/pptx/PlaceholderService.java),
[`PlaceholderExportData`](src/main/java/com/spai/assets/service/pptx/PlaceholderExportData.java) and
[`PlaceholderParser`](src/main/java/com/spai/assets/service/pptx/PlaceholderParser.java), and are
consumed by the document-specific engines: PptxPlaceholderEngineImpl (PowerPoint via Aspose),
PlaceholderProcessor (Google Slides), SpreadsheetPlaceholderProcessor (Excel) and
GoogleSheetsPlaceholderProcessor (Google Sheets).
### Supported formats
| Format | Example | Description |
| --- | --- | --- |
| Simple metric | {{metricName}} | Resolves a deal metric by its name and returns its display value. |
| Multiselect key | {{metricName.key}} | Returns the display name for one selected key of a multiselect metric. |
| Multiselect all-selected | {{metricName.selected}} | Returns all selected options of a multiselect metric, newline-separated. |
| Array element | {{variable[0]}} | Extracts the element at the given (0-based) index from an array-valued metric. |
| Format syntax | {{variable\|currency}} | Formats a metric value using one of the supported format types (see below). |
| Array + format | {{variable[0]\|currency}} | Combines array indexing with formatting. |
| Opportunity fields | {{Opportunity:name}} | Deal/opportunity-level fields (see below). |
| Account fields | {{Account:name}} | Account-level fields (currently only name). |
| Meddicc status | {{Meddicc:X:1}} | Renders a MEDDICC letter status image (`X` = letter, 1 = occurrence number). |
| Meddicc activity | {{Meddicc:X:1:Activity:2}} | Resolves a specific MEDDICC activity's name/status for the letter's 2nd activity. |
| Conditional comment | Conditional {{variable}} | Placed in a slide/cell comment to conditionally show/hide a slide or row based on a boolean/yes-no metric; not itself replaced with a value. |
### Supported format types
Used with the |format suffix on a plain or array placeholder (case-insensitive):
- currency – formatted with the deal's currency symbol
- percentage – formatted with a % sign
- integer – whole number formatting
- number – general numeric formatting
### Opportunity: fields
{{Opportunity:<field>}} supports: name, size (or amount in the PPTX engine), closeDate
(`dd MMM, yyyy`), owner, stage, score, discovery, value, meddiccStatus (renders an
image in PPTX/rendered engines).
### Account: fields
{{Account:<field>}} currently supports only name.
### Unresolvable placeholders
If a placeholder cannot be resolved (unknown metric, bad format type, out-of-bounds array index,
etc.) the engines return a descriptive Unavailable variable ... string instead of failing the
export, so the issue is visible directly in the generated asset.
### Per-destination notes
- PPTX (Aspose): also supports rich-text (HTML) metric values and chart data placeholders
(`VariableN` column headers bound to metric values inside chart data tables).
- Google Slides: supports the same syntaxes, plus HTML-formatted values (bold/italic/lists/
alignment/colors) via inline styling translated to Slides API requests.
- Excel / Google Sheets: placeholders can live directly in cell text (string cells only) or in
a cell comment/note, in which case the whole cell value (and its type — numeric, boolean, or
text) is replaced and the comment/note is removed.