Variables
Variables are named, mutable values you can reference inside Speech, Web Request URLs, Conditions and any other text field that supports {VARIABLE_NAME} placeholders. Set a variable once — from the console, a Flow, an API call or a webhook — and use its current value wherever you need it.
Create a variable
Section titled “Create a variable”Go to Variables (app.voicemonkey.io/variables) and use the inline form at the top of the page: type a name, type a value, click Create Variable.
Name rules:
- Uppercase letters, numbers and underscores only, starting with a letter — e.g.
FIRST_NAME,CAMERA_STATUS,UNREAD_COUNT_2. - Up to 64 characters.
WEBHOOKandWEB_RESPONSEare reserved for built-in placeholders ({WEBHOOK.<slug>.<key>}and{WEB_RESPONSE.<nodeId>.<path>}) and can’t be used as variable names.
Value rules:
- Up to 1024 characters in the console form. The API accepts longer strings but extra-long values aren’t recommended — they tend to make announcement TTS unwieldy.
- Anything you’d like — values are plain strings.
Update a variable
Section titled “Update a variable”- From the console — click the pencil icon next to the value, type the new value, hit save.
- From a Flow — use a Set Variable node.
- From an API call —
PUT https://api-v3.voicemonkey.io/variableswith{ "variable": "NAME", "value": "..." }. Or, on any other endpoint (/announce,/trigger,/flow), send avar-NAME=valueparameter — the variable is upserted before the main action runs. See the Variables API. - From an inbound webhook — add
?var-NAME=valueto the/catchURL the caller hits, or includevar-NAMEin the JSON body. Samevar-shorthand as above.
Delete a variable
Section titled “Delete a variable”Click Delete on the variable’s row in the console. Once deleted, any {NAME} placeholders that referenced it will resolve to an empty string until a variable with that name exists again.
Use a variable
Section titled “Use a variable”A variable’s current value is substituted wherever its {NAME} placeholder appears, at the moment the surrounding action runs.
In an announcement / Speech node
Section titled “In an announcement / Speech node”Hello {FIRST_NAME}, you have {UNREAD_COUNT} unread messages.In a Web Request URL or body
Section titled “In a Web Request URL or body”https://example.com/hook?name={FIRST_NAME}&status={CAMERA_STATUS}In a Condition
Section titled “In a Condition”A Condition node compares a variable against a value using a structured picker (operators: equals, not_equals, contains, not_contains, greater_than, less_than) and branches the Flow based on the result. See Flows → Control nodes.
Storing structured (JSON) values
Section titled “Storing structured (JSON) values”The API’s var- shorthand JSON-stringifies objects and arrays before storing, so you can keep structured payloads in a single variable:
{ "var-PAYLOAD": { "temp": 72, "humidity": 45 } }Stored value: {"temp":72,"humidity":45}.
Inside a Flow, reference fields with the dotted-path syntax: {PAYLOAD.temp} resolves to 72.
Variables vs webhook payloads
Section titled “Variables vs webhook payloads”When an inbound webhook fires, its payload is also addressable via {WEBHOOK.<slug>.<key>} without being copied into a variable. Use whichever fits:
- Variables are durable — they live until you delete or overwrite them.
- Webhook payloads are stored per-webhook and overwritten each time that webhook fires; great for “latest reading”-style data without burning a variable slot.
If you want a webhook value to persist like a normal variable, send it as a var-NAME parameter on the /catch URL — that route upserts the variable on receipt.
Plan limits
Section titled “Plan limits”| Plan | Variables |
|---|---|
| Free | 3 |
| Hobby | 25 |
| Ultimate | Unlimited |
Plan limits are checked when creating a new variable. Updates to existing variables always succeed, even after a plan downgrade.