> ## Documentation Index
> Fetch the complete documentation index at: https://docs.firstwork.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Dynamic Variables

> Use placeholders in templates, messages, and payloads to insert runtime data

Dynamic variables are placeholders that Firstwork replaces when a template, message, or payload is rendered. They use double curly braces in plain text, such as `{{company_name}}` or `{{application.candidate.first_name}}`.

Dynamic variables are the **rendering syntax**. The [Object Graph](/knowledge-base/object-graph) is the **data path system** used when a placeholder needs to read platform data.

***

## How Rendering Works

Firstwork scans template text for `{{...}}` placeholders and replaces each placeholder with a value at send time or preview time.

```text theme={null}
Hi {{application.candidate.first_name}},
your application for {{application.hiring_flow.name}} has moved forward.
```

In rich-text editors, inserted variable chips are stored with an Object Graph path behind the scenes, then rendered into readable values when the message is sent.

***

## Variable Sources

| Source                         | Example                                                             | Notes                                                                                        |
| ------------------------------ | ------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- |
| **Static template variables**  | `{{company_name}}`, `{{BODY}}`, `{{SUBJECT}}`                       | Provided by the notification template renderer for specific email/SMS templates and previews |
| **Object Graph paths**         | `{{application.candidate.email}}`, `{{contract.legal_entity.name}}` | Resolve platform data through the [Object Graph](/knowledge-base/object-graph)               |
| **Automation input variables** | Custom inputs on manual or chained automations                      | Values are supplied by the trigger, caller, or automation configuration                      |
| **Provider/template fields**   | Provider-specific IDs or content blocks                             | Used by configured email/SMS providers where applicable                                      |

***

## Where You Can Use Them

Dynamic variables appear in:

* Email and SMS templates
* Slack message content
* Automation action fields
* Webhook payloads
* Rule-based template text
* Test-send previews, where Object Graph placeholders may render as labels when no application or contract context is available

***

## Relationship to Object Graph

Use the [Object Graph](/knowledge-base/object-graph) when you need to find the data path for a platform field. Use Dynamic Variables when you are authoring the template or payload that embeds that path.

For example:

* Object Graph path: `application.candidate.first_name`
* Dynamic variable in a template: `{{application.candidate.first_name}}`

Attachments are different from body placeholders: email templates can store `attachment_og_paths`, which are raw Object Graph paths pointing to uploaded files or signed documents.
