Public beta — not for production use. Data may be wiped at any time. Questions? Contact us.
Documentation menu

Error catalog

Every user-facing Axiom error — flow run failures in the editor, edge transform errors, and HTTP API error responses — with what causes each one and how to fix it.

View as Markdown

This page lists the errors Axiom shows users, grouped by where you see them: in the editor when a flow run fails, and in HTTP responses when you call the API. Each entry gives the exact error shape, the cause, and the fix.

How errors name nodes and edges

Flow run errors identify nodes by their canvas id — the per-placement id you see on the node card in the editor (for example id-bad or node-1716492048192) — never by the marketplace node name. This matters when a flow contains two placements of the same node: the error names the specific placement that failed, so you can find it on the canvas directly.

Edges are named by quoting both endpoints. An edge error reads:

edge "id-bad" → "echo-merge": EvaluateEdge adapter: transform TRANSFORM_PREFIX failed: prefix needs a string to prepend, e.g. prefix("hi ")

Here id-bad and echo-merge are the canvas ids of the edge's source and destination nodes.

When a failure is attributed to a specific edge or node, the result panel at the bottom of the editor also shows the failure kind (for example EDGE_ADAPTER) and a Show on canvas button. Clicking it selects the offending edge — or node, when the failure has no edge attribution — on the canvas so you can open and fix it. See Debug a flow for the full debugging workflow.

Flow run errors in the editor

When an execution fails, the flow status pill above the canvas shows Failed, the result panel header shows Execution Failed, and the panel's Output tab contains the error text. The errors you can see:

ErrorCauseFix
edge "<src>" → "<dst>": EvaluateEdge adapter: transform TRANSFORM_<NAME> failed: <detail>A transform in the edge's adapter failed at runtime — wrong argument count, a non-numeric argument, or an input value it cannot convert.Open the edge and fix the transform. See Edge transform errors for every transform's error.
edge "<src>" → "<dst>": EvaluateEdge condition: <detail>The edge's condition expression failed to evaluate (for example CEL evaluation failed: …).Fix the condition expression on that edge.
invalid JSON for <InputType>: <detail>The JSON input you submitted does not match the entry node's input message — unknown field, wrong type.Match the field names and types of the entry node's input message. See Type system.
graph produced no terminal resultThe execution ended without the terminal node producing output — typically every outgoing edge condition evaluated to false somewhere along the path.Check edge conditions; make sure at least one path reaches the terminal node for this input.
exceeded max steps (1000)The execution dispatched more than 1000 node steps — almost always a loop that never meets its exit condition.Fix the loop's exit condition.
... daily executions quota exceeded (cap <n>)The flow tried to spawn child executions (fan-out, runtime mutation) after the daily execution quota ran out; the whole flow fails.Wait for the midnight-UTC reset, or ask the operator for a higher limit.
downstream join <n> failed: <reason>A node feeding a join failed, and the join's failure policy aborted the flow.Fix the failing branch, or relax the join's failure policy.
open pipeline stream for node "<id>", send to node "<id>", recv from node "<id>"In pipeline mode, the platform lost the connection to that node's container.Usually transient — re-run; if it persists, check the node's logs.

When your own node code raises an exception, the handler's error message is surfaced verbatim: it appears on the NODE_FAILED event in the result panel's Execution tab, attributed to the failing placement's canvas id.

Edge transform errors

Transforms run inside edge adapters; at runtime a failing transform produces transform TRANSFORM_<NAME> failed: <message> inside an edge error (see above). The messages per transform function, as written in adapter expressions:

FunctionErrorMeaning
multmultiply needs a multiplier value, e.g. multiply(2)No argument given.
multmultiply: "<arg>" is not a numberArgument is not numeric.
addadd needs a value to add, e.g. add(5)No argument given.
addadd: "<arg>" is not a numberArgument is not numeric.
mult, addcannot convert <type> to floatThe input field's value is not numeric.
suffixsuffix needs a string to append, e.g. suffix(" world")No argument given.
prefixprefix needs a string to prepend, e.g. prefix("hi ")No argument given.
celcel requires 1 or 2 args (expression[, srcField])Wrong argument count.
celCEL parse error: <detail> / CEL evaluation failed: <detail>The CEL expression is invalid, or failed against this input.
replacereplace requires 2 args (from, to)Wrong argument count.
replacereplace: `from` is requiredEmpty from argument.
regex_replaceregex_replace requires 2 args (pattern, replacement)Wrong argument count.
regex_replaceregex_replace: `pattern` is requiredEmpty pattern.
regex_replaceregex_replace: invalid pattern: <detail>The pattern is not a valid regular expression.
sliceslice requires 2 args (start, end)Wrong argument count.
splitsplit requires 2 args (sep, index)Wrong argument count.
splitsplit: `separator` is requiredEmpty separator.
splitsplit: index <n> out of rangeFewer parts than the index asks for.
defaultdefault requires 1 argWrong argument count.
castcast requires 1 arg (target kind)Wrong argument count.
castcast: "<value>" is not a number / cast: cannot convert <type> to <kind> / cast: unsupported target kind "<kind>"The value cannot be converted to the requested kind, or the kind is not one cast supports.

upper, lower, trim, and length take no required arguments and do not fail at runtime.

HTTP API errors when invoking a flow

Errors from POST /invocations/v1/flows/invoke and its streaming variant. For the full request/response contract see the HTTP API reference.

Authentication, rate limiting, and quotas

StatusBodyCauseFix
401{"error":"unauthorized"}Missing, malformed, revoked, or expired credentials on any authenticated route.Send a valid key in the Authorization: Bearer header — see Create and manage API keys.
429{"error":"rate limit exceeded"}Your tenant exceeded the per-tenant invocation rate limit (per-second burst). The response carries a Retry-After: 1 header.Back off and retry after the indicated delay.
429{"error":"quota_exceeded", "retry_after_seconds": ...}Your tenant exhausted one of its daily quotas — invocations or executions. The message names which; retry_after_seconds counts down to the reset at midnight UTC.Wait for the daily reset, or ask the operator to raise your tenant's limit.
403{"error":"tenant_suspended"}Your tenant has been disabled by the operator. All invocations and resumes are rejected.Contact the operator.
503{"error":"quota_unavailable", "retry_after_seconds": 5}The quota service could not be reached, so the request was rejected as a safety measure.Transient — retry after the indicated delay.

Structured invoke errors

Invoke failures with a known cause return a structured body:

{
  "error": "payload_too_large",
  "message": "payload exceeds hard cap: actual=17825792 max=16777216",
  "max_bytes": 16777216,
  "actual_bytes": 17825792
}
Statuserror classCauseFix
413payload_too_largeThe input exceeds the 16 MiB hard cap (max_bytes/actual_bytes populated).Shrink the input payload.
503upstream_unavailableThe flow could not be queued; a platform dependency was temporarily unavailable. retry_after_seconds: 5.Transient — retry after the indicated delay.
503blob_storage_unavailableA large input payload could not be stored; a platform dependency was temporarily unavailable. retry_after_seconds: 5.Transient — retry after the indicated delay.

Failures that don't classify return 500 with {"accepted": false, "error_message": "<detail>"}.

Timeouts

With "wait": true, if the execution does not complete within the timeout (default 30 seconds), the response is still 202 — the execution keeps running:

{
  "accepted": true,
  "execution_id": "4bf92f3577b34da6a3ce929d0e0e4736",
  "error_message": "timeout waiting for flow result (30s)"
}

Set "timeout_seconds" to wait longer, or look the execution_id up later in execution history. On the streaming endpoint, a timeout ends the stream with a final frame whose error is "timeout waiting for pipeline result"; a flow that fails mid-stream ends with a final frame whose error carries the flow run error described above.

HTTP API errors when invoking a single node

Errors from the per-node JSON endpoint POST /invocations/v1/nodes/{owner}/{pkg}/{version}/{node} (also accepts a node id in place of the name path):

StatusBodyCauseFix
404{"error_message":"node not found or not yet deployed"} (or node not found: <detail> for a name path that doesn't resolve)The node id or {owner}/{pkg}/{version}/{node} path doesn't match a published, deployed node.Check the package name, version, and node name against the marketplace listing.
400{"error_message":"invalid JSON for <InputType>: <detail>"}The JSON body doesn't match the node's input message.Match the input message's field names and types.
422{"error_message":"<detail>"}The node ran and its handler returned an error — error_message is the handler's own message.Fix the input, or the node code.
502{"error_message":"could not connect to node"} / "calling node: <detail>" / "sending to node: <detail>"The platform could not reach the node's container.Usually transient (cold start) — retry; if it persists, check the node's deployment.

Execution history and debug API errors

Errors from the execution-history and debugging endpoints (used by Debug a flow):

  • Execution history and event requests return 404 with {"error":"execution not found"} when the execution id doesn't exist for your tenant.
  • GET /invocations/v1/executions/{id}/checkpoints/{checkpoint_id} returns 404 with {"error":"checkpoint_not_found_or_expired","detail":"checkpoint may have been evicted by TTL policy (default 30d)"} — checkpoints expire after a retention window (default 30 days), so debug a recent execution instead.
  • Agent memory operations return standard statuses: 404 when a memory entry or session is not found, 400 for invalid arguments, 403 for permission denied, 401 for unauthenticated requests, and 429 when resource limits are exhausted.

All endpoints are tenant-scoped: a valid id belonging to another tenant behaves exactly like a nonexistent one (404), never 403 — see Sandboxing and tenancy.