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.