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

# Webhook payload variables

> Canonical variables for button clicks, repeated rows, and modal submissions.

Webhook payloads use a different context from ordinary template text. Original send data lives under `context`. Use these variables in an action's JSON `payload_template`:

| Path                                                                                                  | Available data                                                    |
| ----------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------- |
| `context.*`                                                                                           | Original data supplied when the message was sent                  |
| `user.id`, `user.username`, `user.name`, `user.team_id`                                               | Slack user who interacted                                         |
| `team.id`, `team.domain`                                                                              | Slack workspace                                                   |
| `interaction.action_id`, `interaction.action_value`                                                   | Button identifier and value                                       |
| `interaction.channel_id`, `interaction.message_ts`                                                    | Original message coordinates                                      |
| `interaction.response_url`, `interaction.trigger_id`                                                  | Slack interaction context; avoid forwarding these unless required |
| `system.timestamp`, `system.event_type`                                                               | Event timestamp and type                                          |
| `rowData.*`                                                                                           | Selected dynamic carousel item, or a legacy encoded row           |
| `item.*`, `this.*`                                                                                    | Aliases for the selected item                                     |
| `modal.*`                                                                                             | Resolved modal bindings during submission                         |
| `submission.id`                                                                                       | Saved modal submission receipt ID                                 |
| `submission.modal_id`, `submission.modal_title`, `submission.submitted_by`, `submission.submitted_at` | Modal submission metadata                                         |
| `submission.values.<action_id>`                                                                       | Form value keyed by the input's action ID                         |

Submission paths exist only on modal submission. Dynamic carousel actions retain their selected item through modal submission and `replace_card` updates. Use `rowData.id` in modal data bindings and `{{rowData.id}}` in payloads; `context.*` remains the complete original message data. Re-send older messages to use this behavior. Slack does not provide user email in this variable contract; use the Slack user ID as the actor identifier.

## Button example

Set the button value to `{{request.id}}` and send with `{ "request": { "id": "REQ-123" } }`. Its webhook payload can be:

```json theme={null}
{
  "event": "approval",
  "request_id": "{{context.request.id}}",
  "action": "{{interaction.action_id}}",
  "value": "{{interaction.action_value}}",
  "actor_id": "{{user.id}}",
  "at": "{{system.timestamp}}"
}
```

## Submission example

For an input whose `action_id` is `reason`:

```json theme={null}
{
  "receipt_id": "{{submission.id}}",
  "request_id": "{{context.request.id}}",
  "reason": "{{submission.values.reason}}",
  "actor_id": "{{user.id}}"
}
```

Use the receipt ID to correlate a submission with the receiver's records. The request also carries `X-LithoBlocks-Submission-Id`. See [Modal submissions](/guides/modals-submissions) for delivery semantics.

Keep payloads minimal. Test the rendered request with representative data rather than assuming an absent variable becomes an empty string. The API returns the interactivity contract under `GET /v1/templates/block-schema`.
