Data between steps
Every step can use what the earlier ones produced. In Studio, that happens through the Data button — you never type a technical path.
What is available
| Source | Contains |
|---|---|
| Input | What the agent received when it was triggered |
| Earlier steps | What each completed step produced |
| The run | Environment, identifier, who asked, and the current attempt |
| The trigger | How the run was started |
And, only inside the "For each item" step, two local sources:
| Local source | Contains |
|---|---|
| The item | The list element being handled on this pass |
| The index | The item's position, starting at zero |
Outside the loop they do not exist, and the picker does not offer them. If a reference to them escapes outside, publishing is refused — rather than silently becoming empty during the run.
The picker shows what exists at that point
The list of available data is computed for that step, at that point in the flow. A step that runs before another cannot see what the other will produce.
This is not just convenience: publishing proves that every reference points at a step that runs earlier. An impossible reference is refused with the step's name, not discovered in production.
What each step produces
| Step | Produces |
|---|---|
| Call an API | The code, the JSON body, the text body, the headers, whether it truncated |
| Run an automation | The automation's result, whether anything changed, the duration |
| AI task | The answer text, how many tools it used and — if you declared them — the fields |
| Generate with a model | The generated text, the model used, the stop reason, tokens |
| Prepare data | Exactly the object you assembled |
| Condition | The evaluated value and the true/false reading |
| Choose a path | The chosen path, the evaluated value, and whether any matched |
| Combine results | The combined value, the sources with no data, and how many brought data |
| For each item | The results, the failures, how many were handled, and the total |
| Human approval | Whether it was approved, who decided, and the comment |
| Wait | When it resumed and how long it waited |
| Call another agent | The child run's identifier and its result |
Declared fields are worth a lot
An AI task with no declared output produces only text. With declared fields, each field becomes separately available to the following steps — and the step becomes verifiable.
It is the difference between the next step receiving a paragraph and receiving category = "finance".
Prepare data
When what the next step needs is not exactly what the previous one produced, use Prepare data: you assemble it field by field, choosing where each value comes from. No code is executed.
Typical uses:
- joining data from two steps into a single object;
- renaming fields to the format an external system expects;
- pinning constant values alongside dynamic ones.
Missing data
A path pointing at something that does not exist returns empty, and does not break the run. That is what makes optional fields workable.
But note: a step that was skipped by a condition produced nothing, and referencing it returns empty. If empty is a problem there, handle it explicitly — in Combine results, for example, by choosing to fail when a source brings no data.
Limits
| Limit | Value |
|---|---|
| Size of what enters a run | 256 KiB |
| Text produced by joining data | 64 KiB |
Next steps
Was this page helpful?
Report a problem on this pageDo not send passwords, keys, tokens, or customer data.