Most surprises with text workflows fall into a few families: a model’s answer was cut or was not the data asked for;
a check rejected the answer and the steps after it were skipped; the text is fluent but wrong — too long, a fact too
many, a word in the wrong language; a figure is written the wrong way; or the price is not the estimate. Find the
symptom below; each links to the page that explains the mechanism.
The run tells you where to look: every step reports its status, its error code and a message that, for these
steps, says what to change (get_execution and get_execution_trace over MCP, GET /api/v1/executions/{id}, the
step’s panel in the editor). A failed AI step is charged only what the provider billed for it: usually nothing for a
provider error, the tokens used for a cut or invalid answer.
| Code |
What happened |
What to do |
AI_RESPONSE_INCOMPLETE |
the model reached Max Tokens before finishing; reasoning counts too |
raise Max Tokens, or lower the reasoning effort (Max Tokens and reasoning) |
INVALID_STRUCTURED_RESPONSE |
JSON mode, and the answer was not valid JSON |
describe the object key by key in the prompt (Structured answers) |
STRUCTURED_RESPONSE_NOT_OBJECT |
JSON mode, and the answer was a list or a single value |
ask for one object: {"items": [...]} |
CATEGORY_NOT_IN_LIST |
Image Classifier: the model answered a category that is not in your list |
add other; say what each category covers (Image Classifier) |
MISSING_PROMPT |
no prompt on the node and nothing on its prompt input |
write it, or check the step that should send it |
EMPTY_RESULT |
the model answered with nothing; the message says why when the provider does |
rephrase, retry, or try another model |
DOCUMENT_LIMIT_EXCEEDED, TOO_MANY_DOCUMENTS |
Document Analysis: more than the provider accepts, or more than 20 documents |
split the documents across steps (Document Analysis) |
| a provider’s refusal |
the model declined the request |
read the message; rephrase the prompt |
| Code |
Node |
What happened |
What to do |
FORMAT_TYPE_MISMATCH |
Format as Text |
a text where a number was needed, or a date not in ISO form (03/10/2026) |
compute the number with Calculate; keep dates as 2026-10-03 (Format as Text) |
INVALID_TEXT_FORMAT |
Format as Text |
an unknown language, currency or date style |
use codes such as it-IT, EUR, long |
TEMPLATE_PLACEHOLDER_NOT_TEXT, JOIN_INPUT_NOT_TEXT, REPLACE_INPUT_NOT_TEXT |
Template, Join, Replace |
a picture, a video or another file reached a text input |
connect a text |
INVALID_REGEX, REGEX_TIMEOUT |
Replace Text |
the pattern is not valid, or ran for more than 2 seconds |
fix the pattern; avoid nested repetitions such as (a+)+ (Replace Text) |
EXTRACT_TYPE_MISMATCH |
Extract |
a field of an AI answer has another type: "true" for true, or null |
ask the model for the right type, and to leave out keys with no value (Structured answers) |
JSON_PATH_NOT_FOUND |
Extract |
the model left out a key the workflow reads |
require it in the schema, or give Extract a default |
The run completed, but the outputs that depend on an AI answer are absent and their steps show as skipped.
- A schema check rejected the answer. Validate JSON Schema in mode
route rejects an answer that breaks the
contract — a missing key, a value outside an enum, a text over maxLength — and every step that reads it is
skipped at no cost. Its errors output says which field broke which rule: tighten the prompt on that field, or
relax the schema if the answer was right (Structured answers).
- A decision cut the branch: a Filter, a Select by Key with no match, an Extract with When Missing
absent —
see Branches and absence.
| Symptom |
Cause |
What to do |
| Longer than asked |
a length in a prompt is a request |
check it with maxLength in a schema; never shorten with Max Tokens, which cuts and fails |
| A fact that is not in the data |
the model filled a gap |
give the facts and say they are the only ones; forbid guessing; for listings, take facts from Image Analysis, not from Product Description (Reading pictures) |
| A different text on every run |
a model’s answer is a proposal |
for a text that must not vary, use a template |
| The wrong language, or two languages mixed |
the language was not stated, or a date or price was left in the source text |
state the language; keep data out of the text and fill it per language (Languages) |
A [marker] lost or translated |
the model rewrote it |
ask to keep every marker exactly as written; count them with Replace before filling |
| A sentence that does not agree with a value filled in |
the translator did not know what the marker holds |
say what each marker holds; choose a form that fits every language |
[name] printed in the result |
a marker with no port of that name |
check the spelling of the marker and the port |
null or an empty gap in a sentence |
a value was missing |
write the sentence so it reads without it, or build that part with Join Text (Text Template) |
| A prompt for a picture that misses the art direction |
the style lives in each item’s prompt |
put it once in the system prompt of the step that writes the prompt (Prompts for other AI steps) |
| A Video Analysis time a few seconds off |
times from a video model are approximate |
use Speech to Text captions for exact times |
| A figure in a document read wrongly |
the model computed instead of copying |
ask it to copy as printed; recompute with Calculate (Document Analysis) |
| Temperature seems to change nothing |
the model does not use it (GPT-5.6, GPT-5.5, the o-series, Claude Opus 4.8 and 5) |
say in the system prompt how free or steady the text should be |
| Symptom |
Cause |
What to do |
83.07 instead of 83,07 € |
the number reached the template as it is stored |
pass it through Format as Text with the reader’s locale and currency |
A date as 2026-10-03 in a sentence |
the same |
Format as Text with date and a date_style |
30% where German writes 30 % |
the locale is not the reader’s |
connect the reader’s locale to Format as Text’s locale input |
| A JSON document quoted as one long string |
it was formatted as text |
use Format as Text with json, which writes the document a text holds |
| Symptom |
Cause |
What to do |
| The charge is far below the estimate |
for text the estimate is a ceiling: Max Tokens written in full plus a reasoning allowance |
nothing to fix; lower Max Tokens if the hold matters (What text costs) |
| A Video Analysis step cost far more than estimated |
the estimate does not count the video’s length yet |
budget about 0.31 credits per minute (Gemini 3.8 Flash); trim the video first |
| A step costs more than its neighbours |
a model that reasons at length, or a long document or video read |
lower the reasoning effort; send only the pages or minutes that matter (Keeping text cheap) |