Looking for HumanLayer's approvals API?

As of 2026-09-02, HumanLayer's site sells coding tools. If you came here for an API that pauses an agent's dangerous tool calls until a human decides, that is the thing Anlyon does.

A few lines on your server, then connect a user.

An approvals API that moved on leaves your agent's riskiest calls without a gate. Anlyon holds those calls for a yes, from the user your agent acts for or from your team, and sends the exact request that was approved.

What happened

What actually happened

HumanLayer built a human-in-the-loop approvals API for AI agents. It was a good product.

As of our last check, humanlayer.dev sells a multiplayer coding agent workspace: an IDE and cloud platform for running agent sessions, design review, and multi-repo work. The approvals API is no longer the product on the front page.

That is a pivot, not a shutdown. If what they ship today does what you need, keep using it. This page is for people who wanted the approvals product and found an IDE.

Checked 2026-09-02 · humanlayer.dev

Job by job

What you probably came here for

Each of these is a thing the approvals API was used for, and how Anlyon does it today.

Jobs the HumanLayer approvals API was used for, and how Anlyon does each one
The jobHow Anlyon does it

Let the user your agent acts for say yes

On a call for one of your users, the approval waits for that user. Render <ApprovalPrompt /> in your app and they approve or decline the exact request there. The key that asked can never decide.

Pause a dangerous function until a human says yes

Wrap the function in approvals.gate(). The call creates an approval, waits for the decision, and runs the original function only if someone approves. Denied throws, expired throws, and a wait that elapses while the decision is still pending throws without running the function. The approval stays decidable in the inbox.

Get told when something is waiting

Approval requests notify over Slack, email, Discord, or a webhook. A pending approval stays in the inbox until it is decided or it expires.

Require more than one approver

Approval policies support N-of-M. A rule can require N distinct approvers before the call runs. N counts distinct credentials for API-key deciders and distinct users for dashboard and OAuth deciders. Admins, members and approvers can decide, and a viewer cannot. A member can hold a different role in each environment, such as approver in production only. The dashboard shows the progress and which policy required it.

Stop the agent approving its own work

Deciding needs a separate approvals:decide scope, and a credential cannot decide an approval it requested. No scope or policy relaxes that.

Prove to someone what was decided

Every decision records the decider, the timestamp, the note, and the governing policy version, on the same trace as the rest of the run. Traces export as OpenTelemetry JSON, so the record leaves in a standard format.

Keep the credential out of the agent entirely

This is the part a wrapper cannot do. Define the call as an action once, with the key referenced as {{secret:STRIPE_KEY}}, and your agent invokes it by name. Anlyon resolves the credential at dispatch and makes the request, so the key is never in the process the model is driving. The gate below is the drop-in. This is the upgrade.

Stop the agent without a deploy

Halting an environment stops the agent acting and stops anything leaving. Action invocations block, and an already-approved call does not run. Resume, and work picks up where it stopped.

Swap the wrapper. The drop-in

No framework change. The function your agent calls is the same function, now with a decision in front of it and a record behind it. Your process still runs it with your credential. When you want the key out of the agent too, move the call into an action and invoke it by name.

agent.ts
import { Client } from '@anlyonhq/sdk';const client = new Client({ apiKey: process.env.ANLYON_API_KEY! });// Wrap the function you already have.const refund = client.approvals.gate(  { title: 'Refund a customer?', timeoutMs: 10 * 60_000 },  async (orderId: string, amount: number) => stripe.refunds.create({    payment_intent: orderId,    amount: Math.round(amount * 100),  }),);// Creates an approval, waits for a human, then runs, or throws.await refund('ord_42', 129.99);

Already in your stack

If your platform already has an approval switch

Some agent platforms now ship their own approval switch. Here is where that is enough.

  • OpenAI Agents API

    As of 2026-09-30, OpenAI's Agents API and Responses API can pause an MCP tool call for approval. The pause is answered by your own code. Anlyon routes the call to a named reviewer, executes the reviewed request with credentials bound to that action, and records the outcome. Use OpenAI's switch when one developer is the reviewer. Use Anlyon when a second person, a record, or a second agent runtime is involved.

    Checked 2026-09-30 · Responses API MCP tool, Agents API MCP connections

Let your agent act for your users, safely.

A few lines of server code, then send a user a connect link. Nothing to host.

$ claude mcp add --transport http anlyon https://api.anlyon.com/mcp