n8n Workflow Orchestration

Delegate API calls to n8n workflows via webhooks — the agent never touches credentials, and every integration is visual and lockable.

Productivity Source: the OpenClaw community

Letting your AI agent directly manage API keys and call external services is a recipe for security incidents. Every new integration means another credential in .env.local, another surface for the agent to accidentally leak or misuse.

This use case describes a pattern where OpenClaw delegates all external API interactions to n8n workflows via webhooks — the agent never touches credentials, and every integration is visually inspectable and lockable.

Pain Point

When OpenClaw handles everything directly, you get three compounding problems:

  • No visibility: It's hard to inspect what the agent actually built when it's buried in JavaScript skill files or shell scripts
  • Credential sprawl: Every API key lives in the agent's environment, one bad commit away from exposure
  • Wasted tokens: Deterministic sub-tasks (send an email, update a spreadsheet) burn LLM reasoning tokens when they could run as simple workflows

What It Does

  • Proxy pattern: OpenClaw writes n8n workflows with incoming webhooks, then calls those webhooks for all future API interactions
  • Credential isolation: API keys live in n8n's credential store — the agent only knows the webhook URL
  • Visual debugging: Every workflow is inspectable in n8n's drag-and-drop UI
  • Lockable workflows: Once a workflow is built and tested, you lock it so the agent can't modify how it interacts with the API
  • Safeguard steps: You can add validation, rate limiting, and approval gates in n8n before any external call executes

How It Works

  1. Agent designs the workflow: Tell OpenClaw what you need (e.g., "create a workflow that sends a Slack message when a new GitHub issue is labeled urgent")
  2. Agent builds it in n8n: OpenClaw creates the workflow via n8n's API, including an incoming webhook trigger
  3. You add credentials: Open n8n's UI, add your Slack token / GitHub token manually
  4. You lock the workflow: Prevent further modifications by the agent
  5. Agent calls the webhook: From now on, OpenClaw calls http://n8n:5678/webhook/my-workflow with a JSON payload — it never sees the API key
┌──────────────┐     webhook call      ┌─────────────────┐     API call     ┌──────────────┐
│   OpenClaw   │ ───────────────────→  │   n8n Workflow   │ ─────────────→  │  External    │
│   (agent)    │   (no credentials)    │  (locked, with   │  (credentials   │  Service     │
│              │                       │   API keys)      │   stay here)    │  (Slack, etc)│
└──────────────┘                       └─────────────────┘                  └──────────────┘

Skills You Need

  • n8n API access (for creating/triggering workflows)
  • fetch or curl for webhook calls
  • Docker (if using the pre-configured stack)
  • n8n credential management (manual, one-time setup per integration)

How to Set It Up

Option 1: Pre-configured Docker Stack

A community-maintained Docker Compose setup (openclaw-n8n-stack) pre-wires everything on a shared Docker network:

git clone https://github.com/caprihan/openclaw-n8n-stack.git
cd openclaw-n8n-stack
cp .env.template .env
# Add your Anthropic API key to .env
docker-compose up -d

This gives you:

  • OpenClaw on port 3456
  • n8n on port 5678
  • Shared Docker network so OpenClaw can call http://n8n:5678/webhook/... directly
  • Pre-built workflow templates (multi-LLM fact-checking, email triage, social monitoring)

Option 2: Manual Setup

  1. Install n8n (npm install n8n -g or run via Docker)
  2. Configure OpenClaw to know the n8n base URL
  3. Add this to your AGENTS.md:
## n8n Integration Pattern

When I need to interact with external APIs:

1. NEVER store API keys in my environment or skill files
2. Check if an n8n workflow already exists for this integration
3. If not, create one via n8n API with a webhook trigger
4. Notify the user to add credentials and lock the workflow
5. For all future calls, use the webhook URL with a JSON payload

Workflow naming: openclaw-{service}-{action}
Example: openclaw-slack-send-message

Webhook call format:
curl -X POST http://n8n:5678/webhook/{workflow-name} \
  -H "Content-Type: application/json" \
  -d '{"channel": "#general", "message": "Hello from OpenClaw"}'

Key Insights

  • Three wins in one: Observability (visual UI), security (credential isolation), and performance (deterministic workflows don't burn tokens)
  • Lock after testing: The "build → test → lock" cycle is critical — without locking, the agent can silently modify workflows
  • n8n has 400+ integrations: Most external services you'd want to connect already have n8n nodes, saving the agent from writing custom API calls
  • Audit trail for free: n8n logs every workflow execution with input/output data

Inspired By

This pattern was described by Simon Høiberg, who outlined three reasons this approach beats letting OpenClaw handle API interactions directly: observability through n8n's visual UI, security through credential isolation, and performance by running deterministic sub-tasks as workflows instead of LLM calls. The openclaw-n8n-stack repository provides a ready-to-run Docker Compose setup implementing this pattern.

Related Links

Want to run this on autopilot?

Spin up OpenClaw Cloud, install the skills, and wire this workflow into your chat in minutes.