Skip to main content

AI Agent Governance for Make.com, Zapier, and n8n: How to Enforce Policy and Keep Audit Trails

· 5 min read
David Sanker
Lawyer, Legal Knowledge Engineer & UAPK Inventor

Automation platforms like Make.com, Zapier, and n8n have made it easy to build AI-powered workflows. But "easy to build" doesn't mean "safe to deploy in production" — especially when those workflows take real-world actions: sending emails, filing documents, moving money, or updating records.

This post shows how to wire UAPK Gateway into any automation platform to get:

  • Policy enforcement (ALLOW / DENY / ESCALATE before any action runs)
  • Human approval gates (escalated actions wait for a real person)
  • Tamper-evident audit logs (hash-chained, cryptographically signed records)

Why You Need Governance Beyond What Automation Platforms Provide

Make, Zapier, and n8n give you logs. They don't give you governance.

Logs tell you what happened. Governance decides what's allowed to happen and stops it if not.

The difference matters when:

  • A compliance team asks "who authorized this?" — not just "when did it run?"
  • A regulator asks for evidence a human reviewed high-risk actions before execution
  • A developer makes a mistake in a workflow and you need to know the $50K transfer was blocked, not just that the step errored
  • You're in a regulated industry (legal, finance, healthcare) where "the AI did it" is not a defense

UAPK Gateway is a sidecar that sits between your automation and the outside world. Every action goes through it first.

The Pattern: Evaluate → Branch → Execute

The integration pattern is the same regardless of platform:

Trigger → Build action payload → UAPK Evaluate → Branch on decision:
allow → Execute action → Log result
deny → Stop / notify
escalate → Notify reviewer → Wait for approval → Re-submit with override token

The evaluate call is a dry run — no side effects, instant policy check. The execute call does the same check plus runs the action.

Make.com

UAPK Gateway has a native Make.com custom app with 8 modules.

Install: Import the app JSON from github.com/UAPK/gatewaysdks/make/app.json into your Make.com team.

Connection fields:

  • Base URL: https://api.uapk.info
  • Organization ID: from your dashboard
  • API Key: from your dashboard
  • Management Token: JWT from POST /auth/login (for approvals)

Sample scenario — email governance:

  1. Gmail Trigger → new email matching criteria
  2. UAPK: Execute Action
    • UAPK ID: email-agent
    • Action Type: send_email
    • Tool: email:send
    • Params: {"to": "{{email.from}}", "subject": "...", "amount": null}
  3. Router → branch on decision
    • allowGmail: Send Message
    • denySlack: Post Message (notify team of denial)
    • escalateSlack: Post Message with approval_id, wait for manual step, then re-submit with override token

The key: the email doesn't send unless UAPK says allow. If the recipient is on a denylist, or the daily email budget is exceeded, it's blocked — automatically, without code changes.

Zapier

The UAPK Gateway Zapier app is published as a private integration (request access at [email protected]).

It includes 4 creates and 3 searches:

  • Creates: Evaluate Action, Execute Action, Approve Action, Deny Action
  • Searches: Find Approval, List Pending Approvals, Find Audit Records

Sample Zap — financial workflow:

  1. Trigger: Typeform submission (payment request)
  2. UAPK: Evaluate Action — check if amount is within policy
  3. Filter: Only continue if decision = allow
  4. Stripe: Create Payment Intent — only runs after UAPK approval

For escalated actions (amount above threshold), a separate Zap handles the approval workflow:

  1. Trigger: Schedule (every 15 min) or webhook
  2. UAPK: Find Pending Approvals
  3. Filter: Has pending approvals
  4. Gmail: Send Email — alert reviewer
  5. UAPK: Approve Action — after manual confirmation step
  6. Returns override_token for the agent to re-submit

n8n

The UAPK Gateway n8n node is published to npm as n8n-nodes-uapk-gateway.

Install: In your n8n instance → Settings → Community Nodes → n8n-nodes-uapk-gateway

The n8n node has a distinctive feature: three output pins — Allow, Deny, Escalate. This maps naturally to n8n's visual workflow branching.

[HTTP Request: webhook] → [UAPK Gateway: Execute]

┌─────────────────────┼────────────────────────┐
Allow Deny Escalate
│ │ │
[Postgres: Insert] [Slack: notify] [Email: alert reviewer]

Each output pin routes to a completely separate branch of your workflow. No extra router nodes, no conditional expressions to write.

Available operations:

  • Gateway: Evaluate, Execute
  • Approval: Get, Approve, Deny, List Pending
  • Records: List, Verify Integrity

Langflow

For AI-native workflows built in Langflow, install the uapk-langflow PyPI package:

pip install uapk-langflow

Eight components appear in your Langflow sidebar under "UAPK Gateway":

  • Evaluate Action — policy dry-run, connect to Conditional Router
  • Execute Action — policy + execution, routes to Allow/Escalate branches
  • Approve / Deny Action — HITL decision nodes
  • Get Approval / List Pending Approvals — approval status queries
  • List Records / Verify Integrity — audit log access

The Langflow pattern is ideal for RAG pipelines where the agent reads documents and then needs to take regulated actions (file a brief, send a contract, initiate a payment). The Evaluate component gives compliance a checkpoint without breaking the flow.

What Goes in the Audit Log

Every action that passes through UAPK Gateway generates a tamper-evident record:

{
"record_id": "int-abc123",
"uapk_id": "email-agent",
"agent_id": "make-scenario-001",
"action_type": "send_email",
"tool": "email:send",
"decision": "allow",
"decision_reason": "All policy checks passed",
"record_hash": "sha256:...",
"previous_record_hash": "sha256:...",
"gateway_signature": "ed25519:...",
"created_at": "2026-03-28T..."
}

Each record includes:

  • The action details and policy decision
  • A SHA-256 hash of this record
  • The previous record's hash (hash chain — tampering is detectable)
  • An Ed25519 signature from the gateway

You can verify the entire chain with a single API call:

GET /api/v1/orgs/{org_id}/records/verify/integrity
# → { "valid": true, "record_count": 1842, "errors": [] }

This is what "court-admissible audit log" means in practice: not just logs, but cryptographically verified, hash-chained, independently verifiable records that you own and control.

Getting Started

  1. Start the manifest builder at build.uapk.info — create your first agent manifest in under 5 minutes
  2. Get your API key from the UAPK dashboard
  3. Follow the integration guide for your platform:

Or contact us if you want a pilot on your infrastructure with expert setup included.