Skip to content
synthreo.ai

Output Data - Synthreo Builder

Output Data node for Builder - define the final structured output your AI agent workflow returns, mapping internal variables to response fields for APIs and downstream systems.


The Output Data node is the finalization node in a Builder workflow. It collects data produced by upstream nodes, formats it using a template engine, and exposes the result as the workflow’s final payload. This payload is what the end user sees in ThreoAI, or what is returned to an API caller or downstream system.

Every workflow that returns a result to a user or external system should end with an Output Data node. Without it, the workflow produces no visible output even if intermediate nodes computed values correctly.


When a Builder agent is published and used via the ThreoAI chat interface or BotX widget, the content rendered in the Output Data node’s data field is what the user sees as the AI agent’s reply. The template engine processes the data field, substitutes variable references with their computed values, and sends the resulting string to the user’s chat window.

Markdown formatting is supported - headings, bullet lists, bold text, and code blocks all render correctly in the ThreoAI interface when the template contains valid Markdown. To render unescaped HTML or Markdown, use triple curly braces: {{{Out.variableName}}}.


  • Formatted Payload: A string produced by the selected template engine after substituting all variable references.
  • Raw Context (optional): The unformatted value of whatever upstream variables were referenced (useful during development when setting data to a single variable reference like {{Out.gpt_response}}).

NameTypeRequiredDefaultDescription
dataRich Text / TemplateNo(empty)The output template. Reference upstream variables using {{Out.variable_name}} (e.g., {{Out.gpt_response}}). Use triple braces {{{Out.variable_name}}} to render unescaped HTML or Markdown content. Static text and variable references can be mixed freely.
String CompilerDropdownNoSynthreo String CompilerTemplate engine used to process the data field. Synthreo String Compiler handles simple variable substitution and is the fastest option.
Suppress Skipped ExecutionBooleanNofalseWhen set to true, this node runs and produces output even when upstream nodes were skipped (e.g., due to a conditional branch not executing). Use this to guarantee the workflow always returns a response - for example, a fallback message when no data was found or an error summary when processing failed. When false, if upstream nodes were skipped, this node is also skipped and the workflow returns no output for that run.
Allow OverrideBooleanNofalseWhen set to true, permits later nodes or subsequent workflow steps to modify this node’s output after it has been set. Use this when a workflow has multiple possible exit points and a later step needs to replace an earlier output with more specific content.

Reference any upstream node’s output using the Output Column Name configured on that node:

  • {{Out.gpt_response}} - references the output of a node whose Output Column Name is gpt_response
  • {{Out.customerData}} - references the output of a node named customerData
  • {{{Out.gpt_response}}} - renders the value without HTML escaping (use for Markdown or HTML content)

Variable names are case-sensitive. If the upstream node’s Output Column Name is gpt_response, writing {{Out.GPT_Response}} will not resolve.


The Synthreo String Compiler processes the data template field by finding all {{...}} references and replacing them with the corresponding values from the workflow context. It is the default and recommended compiler for most use cases.

For simple output - a single AI response rendered as text or Markdown - set the data field to:

{{Out.gpt_response}}

For structured output combining multiple variables:

**Order ID:** {{Out.orderId}}
**Customer:** {{Out.customerName}}
**Total:** {{Out.orderTotal}}
**Summary:**
{{Out.gpt_response}}

For unescaped Markdown content (when the upstream node produces Markdown-formatted text):

{{{Out.gpt_response}}}

Compiler: Synthreo String Compiler

## Order Summary
**Order ID:** {{Out.orderId}}
**Customer:** {{Out.customerName}} ({{Out.customerEmail}})
**AI Analysis:**
{{{Out.gpt_response}}}

While prototyping, set data to a single variable reference to inspect the raw output of an upstream node:

{{Out.gpt_response}}

Once you know the shape of the data, narrow the template to only the fields you need.

Fallback Response with Suppress Skipped Execution

Section titled “Fallback Response with Suppress Skipped Execution”

When building a workflow where a conditional branch may skip the main processing node, add a second Output Data node on the fallback branch with Suppress Skipped Execution enabled:

  • Main path: Output Data node renders the AI response.
  • Fallback path: Output Data node with Suppress Skipped Execution = true renders a message such as “No results were found for your request.”

This ensures users always receive a response rather than a blank reply.


  • Begin broad, then narrow: During prototyping, set data to the full upstream variable (e.g., {{Out.gpt_response}}), inspect the shape of the response, then narrow the template to only the fields needed.
  • Choose the right compiler: Use Synthreo String Compiler for simple variable substitution. It is the fastest option and handles the majority of use cases.
  • Use triple braces for Markdown: When an upstream LLM node returns Markdown-formatted text, use {{{Out.gpt_response}}} to prevent the compiler from escaping special characters.
  • Enable Suppress Skipped Execution on fallback branches to guarantee users always receive a response even when the main processing path did not execute.
  • Use Allow Override when a workflow has multiple conditional paths that may each produce different output - only the last Output Data node to run with Override enabled will determine the final response.
  • Keep machine-readable outputs clean: When the workflow result is consumed by another system or API rather than displayed to a human, render only the data fields needed and avoid mixing prose with structured data.

  • Blank output: Check that variable names are spelled correctly and match the Output Column Name of the upstream node exactly (case-sensitive). Confirm the upstream node actually ran and produced output.
  • Malformed JSON output: When rendering JSON, avoid trailing commas and ensure array or object values are already JSON-encoded if you are embedding them in a larger structure.
  • Markdown not rendering: Use triple braces {{{...}}} instead of double braces {{...}} for content that contains Markdown syntax.
  • Slow rendering: Prefer Synthreo String Compiler for simple outputs and minimize complex expressions in large payloads.

  • Default pass-through: data = "{{Out.gpt_response}}", compiler = Synthreo String Compiler - Expected: The gpt_response value from the upstream LLM node is rendered as a string in the output.
  • Suppress Skipped Execution enabled, upstream skipped: - Expected: The Output Data node still runs and returns its configured fallback content.
  • Unescaped Markdown with triple braces: data = "{{{Out.gpt_response}}}" - Expected: Markdown formatting in the response is preserved and renders correctly in ThreoAI.