Require approval before an AI agent performs a risky action.
Record proposed actions, apply configurable risk thresholds, approve or reject held actions, and retain an independent outcome record. Lower-risk actions can proceed automatically; actions at or above your threshold wait for a decision from a person or your own approval tooling.
New to APIs? See where Ledger fits and copy the setup prompt →
- Risk
- High
- State
- Pending approval
- Record
- Forward-only
Three lines before the risky part
// Before a risky action, propose it
const res = await fetch("https://shield-api.3stoneai.com/api/v1/ledger/actions", {
method: "POST",
headers: { Authorization: "Bearer sk_ledger_...", "Content-Type": "application/json" },
body: JSON.stringify({
agentId: "deploy-bot",
description: "Delete unused S3 buckets older than 90 days",
riskLevel: "high",
}),
});
const { action } = await res.json();
// action.status is "pending_approval" - wait for a real decision
// before actually doing itA real gate, not a suggestion
Real approval gates
Below your risk threshold, an action auto-approves and the agent proceeds. At or above it, the agent waits for a real decision - yours, or your own tooling's.
An audit trail an agent can't fake
Every proposal, decision, and execution is a real, timestamped, forward-only record - an agent's own self-report was never going to be trustworthy evidence.
Works with whatever you already have
Decide via a simple API call - a Slack bot, an on-call tool, or a person on a laptop. No new dashboard to learn on day one.
Never overwritten
A decided action stays decided. The API itself enforces it - not a convention, a real constraint.
Metered, not per-seat.
$29/month
- 1,000 logged actions/month included
- Real approval-gate + audit-trail API
- Works with your own decision tooling
- No contract - cancel anytime
What this is - and isn't
Ledger logs and gates actions your own code proposes to it - it doesn't inspect your agent's reasoning or intercept calls it isn't told about. There's no dashboard UI yet; decisions happen via the API itself, deliberately, until real usage shows what a dashboard actually needs to show.