# Syntax Reference
## Variables
```text
$ variable_name = value
$ variable_name = $(command)
$ variable_name = [[ prompt_name ]]
$ variable_name = [foo, bar]
```
- Array assignments expand the request once per value. When a request references multiple array variables, Hen runs the Cartesian product of those values (up to two variables and 128 total combinations).
- Arrays must contain simple scalar values (no whitespace or nested arrays). Their values can still come from commands or prompts.
- Requests generated from arrays are suffixed with the selected values (for example, `[USER=foo]`). A failing iteration aborts the remaining iterations, and exports from each iteration are suffixed with the same label.
- Requests cannot declare dependencies on a mapped request; share setup through an unmapped helper instead.
## Headers
```text
* header_key = header_value
* header_key = {{ variable_name }}
* header_key = [[ prompt_name ]]
```
## Query Parameters
```text
? query_key = query_value
? query_key = {{ variable_name }}
? query_key = [[ prompt_name ]]
```
## Multipart Form Data
```text
~ form_key = form_value
~ form_key = {{ variable_name }}
~ form_key = [[ prompt_name ]]
~ form_key = @/path/to/file
```
## Request Body
```text
~~~ [content_type]
body
~~~
```
## Response Captures
```text
& body -> var_name
& body.json_field -> var_name
& header.header_name -> var_name
& status -> var_name
```
## Assertions
`val` can be a variable or a response capture.
```text
^ & body.field == 'value'
& body.field -> VAR
^ VAR == 'value'
```
```text
^ val == value
^ val != value
^ val =~ /regex/
^ val > value
^ val >= value
^ val < value
^ val <= value
```
## Callbacks
```text
! callback code
! ./path/to/callback_file.sh
! some command -> $VARIABLE_NAME
```
Assignments require whitespace around `->` and suppress the command's stdout.
## Dependencies
```text
> requires: Request Name
```