
ApprovalML is the open workflow definition language and runtime underneath Aptiwise. Steps, routing, forms, and SLAs compile down to portable YAML: reviewable in a pull request like any other config file, and it runs on your own infrastructure if you want it to.
The Problem
Most approval tools store routing logic in a proprietary database you can't diff, review, or move: there's no way to see what changed or roll it back.
Regulated teams need the approval engine running on their own infrastructure, not a hard dependency on someone else's cloud.
Autonomous agents given tool access can create, overwrite, or delete, with no gate in front of the sensitive calls and no audit trail of what was requested.
How ApprovalML Works
Workflows compile to data, not code, so they're portable, diffable, and safe to hand to a human or an AI agent.
Every workflow compiles to portable, version-controllable ApprovalML YAML. Review a routing change in a pull request the same way you'd review any other config: no proprietary format, no black-box UI required to understand what will happen.
An agent requests approval over MCP; a human approves or rejects by email, no login required. The agent's tool call only proceeds once a human signs off, routed through the identical engine as every other ApprovalML workflow.
One Docker command stands up the full open-source approval engine and email approvals, with no external cloud dependency required. Start self-hosted, and move to Aptiwise Cloud later without rewriting a single workflow.
The open-source runtime covers the full approval engine and email approvals. AI-powered workflow generation, the admin UI, and multi-tenant management are part of Aptiwise Cloud.
One command spawns any existing stdio MCP server as a child process and re-exposes it with sensitive tools gated behind human approval: no changes to the upstream server, no per-server integration work.
Self-Host or Go Managed
ApprovalML
Self-host the open-source runtime today, or start on Aptiwise Cloud and get the full AI-powered platform on top of the same engine.