Significant-Gravitas/AutoGPT · error · InvalidInputError

Graph #{graph_id} does not have a webhook trigger node

Error message

Graph #{graph_id} does not have a webhook trigger node

What it means

InvalidInputError raised inside setup_triggered_preset when the graph exists but graph.webhook_input_node is None — the graph contains no webhook-capable input block, so no trigger can be registered. It signals a caller-side modeling problem: only graphs whose input includes a webhook block (e.g. webhook trigger blocks from the integrations framework) support triggered presets.

Source

Thrown at autogpt_platform/backend/backend/api/features/library/triggers.py:60

    Sets up the webhook for the graph's trigger node — auto-registering it with
    the provider for auto-setup webhooks, or just minting the ingress URL for
    manual-setup webhooks — then creates a preset linked to that webhook. The
    returned preset has ``.webhook`` populated, so ``preset.webhook.url`` is the
    ingress URL to hand to the user for manual-setup webhooks.

    Fetches the graph itself (rather than taking a ``GraphModel``) so it can run
    as an RPC endpoint without serializing the whole graph across the boundary.

    Raises:
        NotFoundError: if the graph no longer exists / isn't accessible.
        InvalidInputError: if the graph has no webhook node, or the webhook
            backend rejects the trigger config / credentials.
    """
    graph = await get_graph(graph_id, version=graph_version, user_id=user_id)
    if not graph:
        raise NotFoundError(f"Graph #{graph_id} is not accessible (anymore)")
    if not (trigger_node := graph.webhook_input_node):
        raise InvalidInputError(
            f"Graph #{graph_id} does not have a webhook trigger node"
        )

    trigger_config_with_credentials = {
        **trigger_config,
        **(
            make_node_credentials_input_map(graph, agent_credentials).get(
                trigger_node.id
            )
            or {}
        ),
    }

    # Resource-follows-parent: the webhook lives in the graph's org/team,
    # not the caller's active org.
    new_webhook, feedback = await setup_webhook_for_block(
        user_id=user_id,
        trigger_block=trigger_node.block,

View on GitHub (pinned to 9c8bb5550f)

Solutions

  1. Add a webhook trigger block (from the integrations category) as the graph's input node and re-save the graph.
  2. Verify programmatically: fetch the graph and check graph.webhook_input_node is not None before calling setup.
  3. Ensure you reference the graph version that actually contains the webhook node.
  4. Handle InvalidInputError in callers with a message telling the user to add a webhook trigger to the agent.

Example fix

# before
await setup_triggered_preset(user_id=uid, graph_id=gid, graph_version=v, ...)
# after
graph = await get_graph(gid, version=v, user_id=uid)
if graph and not graph.webhook_input_node:
    raise ValueError("Add a webhook trigger block to this agent before setup")
await setup_triggered_preset(user_id=uid, graph_id=gid, graph_version=v, ...)
Defensive patterns

Strategy: type-guard

Validate before calling

graph = await get_graph(gid, version=v, user_id=uid)
if graph and not graph.webhook_input_node:
    raise ValueError('Graph needs a webhook trigger block before trigger setup')

Type guard

def supports_webhook_trigger(graph) -> bool:
    """True when the graph has a webhook-capable input node."""
    return graph.webhook_input_node is not None

Try / catch

try:
    await setup_triggered_preset(...)
except InvalidInputError as e:
    if 'webhook trigger node' in str(e):
        raise NeedsWebhookBlock('Add a webhook trigger block to the agent') from e
    raise

Prevention

When it happens

Trigger: POST /presets/setup-trigger for a graph built with a manual/scheduler start block instead of a webhook block; a graph whose webhook node was removed in a newer version while an older version_id was passed; calling the setup-trigger RPC on a plain agent graph.

Common situations: Developer assumes any agent can be webhook-triggered; UI allows trigger setup for non-webhook graphs; graph duplicated from a webhook template then had the webhook node deleted.

Related errors


AI-assisted analysis of Significant-Gravitas/AutoGPT@9c8bb5550f (2026-08-14). Data as JSON: /api/errors/b694441e0549240c. Report an issue: GitHub.