Variables
Variables are values referenced as {{name}} in endpoint paths, headers,
parameters, bodies, export-system connection fields, action fields and
filters. They keep tenant ids, date ranges, keys and secrets out of the
objects that use them, and they are what lets one configuration be promoted
between environments: the variable travels, the value stays.
Variables in the sidebar lists them with Variable, Value
(masked for encrypted ones; a dash for the kinds that are computed),
Type, Encrypted and actions Preview and Edit; system
variables appear as read-only rows at the end. New Variable opens the
dialog. The name is required, at most 50 characters, unique, and cannot be
changed after creation; p:, j:, g: and o: are reserved prefixes.
Static
A fixed value, optionally Encrypted. An encrypted value is stored encrypted and masked on every read; when editing, the field shows dots and an eye icon reveals it (the reveal is audited). Saving without revealing never overwrites the secret. Use encrypted variables for passwords and keys in credentials, headers and export systems.
Date
A date computed when the variable is used, from an Expression:
today, today±N (days), startOfMonth and endOfMonth (±N months, so
startOfMonth-1 is the first day of last month), lastLoadedAt and
lastLoadedAtDate (with -N for hours or days, and a Reference Dataset
whose last-load stamp is used). Format uses the tokens YYYY, MM,
DD, HH, mm, SS, default YYYY-MM-DD. Dates are UTC.
A Date variable's lastLoadedAt is the referenced dataset's stamp,
which every instance's load advances. For an incremental filter that must be
right per instance, use the system variable {{system:lastLoadedAt}}
instead (see System variables).
Data reference
Values read from an already-loaded dataset, so an endpoint can fan out over them or page from a watermark:

- Schema, Dataset, Field — where the values come from. The eye icon shows a sample record to pick the field from.
- Aggregation — None gives every distinct value and the endpoint is called once per value. MAX or MIN gives a single value, for example the highest entry number already loaded, to page from. Group by gives one MAX per distinct value of another field.
- Filter (JSON) — a Mongo-style filter applied before the values are
read, for example
{ "Closed": { "$ne": 1 } }. Other variables work inside it ({{system:today-7}},{{lastEntry}}). The Tune icon opens the Filter builder, which shows sample rows and inserts a clause when you click a cell, with a cheat sheet of operators. - Ask AI in the filter builder opens a chat: describe the rows you want in your own words, and the assistant proposes a filter, runs it, and shows how many rows match and what the variable resolves to. Use this filter puts the proposal in the editor; Apply writes it. The assistant sees field names, types and a few sample values per field, never whole rows. Needs the Standard or Enterprise plan and AI configured.
- Only values not loaded before — skip values whose generated endpoint
URL already exists in the target dataset. For fan-out loops such as invoice
numbers that drive an
/invoices/{{number}}/linesfetch: once an invoice's lines are loaded, that number stops appearing. - Date format — format the value when it is a date.
When the referenced dataset belongs to the source system being loaded, the values are read for the instance being loaded; a dataset of another source system is read across all its instances. Deleted rows are never read.
Preview lists the values per instance. After previewing a MAX or MIN, the dialog suggests an index when the aggregation reads every matching record, and Create index builds it; without the index a large dataset makes the preview, and the loads using the variable, time out.
Key Vault secret
The value is read from your Azure Key Vault each time the variable is used, so rotating the secret takes effect without editing anything here, and nothing is stored in Cloud Connector. Pick the Key Vault and the Secret (or type their names when they cannot be listed) and press Test access. The deployment's managed identity needs Key Vault Secrets User on the vault, and Reader on the subscription or resource group to list vaults. Enterprise only; an existing Key Vault variable keeps resolving after a downgrade.
Integer loop
An incrementing counter for page-numbered APIs: ?page={{loop}} in the URL
path or in a query parameter.
- Start From (page-based APIs usually start at 1) and Increment By.
- Stop Criteria (optional) — leave empty to stop when a page returns no rows. Set it only when the API returns a non-empty "no more data" answer; give a substring unique to that answer.
- Max Iterations — a safety limit, default 500. Reaching it stops the loop without a warning, so raise it for a source with more pages.
A refused first page fails the load with the API's answer; a 4xx after rows have arrived counts as the end. Next-link paging is still followed inside each iteration.
Global variables
A global variable has the same value in every environment and is
referenced as {{g:name}}, always with the prefix ({{name}} and
{{g:name}} are different variables). The Global variables tab on the
Variables page, shown on plans with several environments, lists them;
New Global Variable creates one. Globals are created and edited in the
default environment only and listed read-only elsewhere. They can be
static (optionally encrypted) or a Key Vault secret; the other kinds depend
on the environment they run in. Packages carry globals, and an import writes
them only when loading into the default environment.
System variables
Resolved at load time, no setup needed:
| Variable | Value |
|---|---|
{{system:today}} | Today's date, YYYY-MM-DD, UTC. -N / +N offsets by days; :FORMAT changes the layout, for example {{system:today-1:YYYYMMDD}} |
{{system:now}} | Date and time, YYYY-MM-DD HH:MM:SS, with :FORMAT. No offset |
{{system:lastLoadedAt}} | The start of the previous finished load of this dataset for the instance being loaded, YYYY-MM-DDTHH:MM:SSZ. -N subtracts hours. A load that ended with a warning counts; a failed one never does. An instance that never finished a load gets 1970-01-01T00:00:00Z |
{{system:lastLoadedAtDate}} | The date alone. -N subtracts days |
The two lastLoadedAt variables take no :FORMAT and are resolved in the
endpoint URL path only: a token in a header, parameter row or body is sent
as literal text. Put the incremental filter in the path.
Inside jobs, {{j:system:jobName}} and {{j:system:activityName}} name the
running job and activity (see Jobs).
Inline arithmetic and several tokens
On a data reference or integer loop variable, {{name+N}} and
{{name-N}} shift the value: No ge {{loop}} and No le {{loop+100000}}
reads a window per iteration, {{lastEntry-100}} re-reads the last hundred
entries. N may be a decimal; a variable literally named field-2 wins over
the arithmetic reading. It is not available on other kinds, in filters, or
on a data reference that has a date format.
One data-reference or integer-loop variable may appear several times in an
endpoint path ({{d}}T00:00:00 and {{d}}T23:59:59, or {{d}} next to
{{d+1}}). An endpoint may use one data-reference variable or one
integer-loop variable, not two different ones and not both.
Where each kind resolves
| Field | Resolves |
|---|---|
| Endpoint URL path | Every kind, including data reference (one request per value), integer loop and lastLoadedAt |
| Query parameters | Static, Key Vault, global, date, system:today / now, integer loop |
| Base URL, credentials, headers, bodies, action fields, export-system fields, filters | Static, Key Vault, global, date, system:today / now |
Typing {{ in any of these fields opens the picker; it hides what the field
cannot resolve.