Compare — with proof, not adjectives
Every sentence in the first column is the docstring of a test that ran today against this codebase. If a test goes red, its sentence is removed from this page before it is published. The competitor columns quote the vendors' own sites and documentation and say "not described" where we found nothing — we do not guess.
| Claim | Raposa Aval | Approval pause in an agent SDK | gotoHuman (per their site and docs) | Orako (per their site) |
|---|---|---|---|---|
| Every decision is sealed in a SHA-256 hash chain; editing one past entry breaks verification from that point. | ✓ test_claim_audit_chain_detects_tampering |
log line, editable | 'audit logs' on Business ($950); tamper-evidence not described | conversations 'saved, searchable, attributed'; tamper-evidence not described |
| The customer's own approver is named on the decision — in the approval, the webhook and the audit export. | ✓ test_claim_named_approver_in_decision_and_export |
only if you log it | reviewer acts in the Agent Inbox; name in export not described | answers attributed with author and date |
| Approve-by-email links are safe for mail scanners: opening the link decides nothing, only the button does. | ✓ test_claim_email_link_get_never_decides |
no email channel | email notifications; link semantics not described | no email channel described (Slack, Discord, inbox) |
| A tampered or expired approval link is refused (403/410) and leaves no trace in the audit trail. | ✓ test_claim_tampered_link_is_refused |
n/a | not described | not described |
| Approve from Telegram: a card with two buttons; updates are accepted only with the webhook secret, and a press decides under the approver's name. | ✓ test_claim_telegram_buttons_need_the_webhook_secret |
you build the bot | no Telegram (web inbox, email, Slack; Teams 'soon') | no Telegram (Slack, Discord, dashboard) |
| Approve from Slack: a direct message with two buttons; every press is verified against Slack's request signature and decides under the approver's name. | ✓ test_claim_slack_buttons_are_signature_checked |
you build the app | Slack notifications on every plan | answer in the Slack thread |
| Two-signature approvals: only the named group may decide, and every signer's name is on the decision. | ✓ test_claim_n_of_m_records_every_signer |
you build it | 'review routing' from Team ($99); N-of-M not described | not described |
| If approvers stay silent, a reminder goes out exactly once and a second person can be pulled in, with their own name on the decision. | ✓ test_claim_reminder_once_and_escalation |
you build it | not described in docs index | 'nudges and team channel alerts' for unanswered questions |
| A customer can only read its own approvals; another customer's id answers 404, not 403. | ✓ test_claim_customers_are_isolated |
single tenant | workspaces (1; 5 on Business) | orgs and projects |
| Timeouts are never approvals: the MCP server and both SDKs return approved=false on silence. | ✓ test_claim_silence_is_not_consent |
depends on your code | not described | not described |
| Webhooks are HMAC-signed with the customer's secret and retried four times, every attempt audited. | ✓ test_claim_webhook_is_signed_and_retried |
you build it | webhooks are the integration model; signing and retries not described | MCP round-trip; webhooks not described |
| Each approver login can carry its own TOTP second factor, issued by the operator, never self-enrolled from a stolen password. | ✓ test_claim_totp_available_per_approver |
n/a | not described | not described |
| Error tracking (Sentry, EU region) never receives approval context, emails, tokens or request bodies. | ✓ test_claim_error_tracking_never_sees_customer_data |
your own stack | not described | not described |
| Servers and database are in Germany (OVH, Frankfurt), encrypted backups in France; verified by whois of the live host. | ✓ test_claim_hosted_in_the_eu |
wherever you run | 'secure European servers', GDPR; Berlin company | region not stated; self-hosting available (AGPL, Docker Compose) |
| DPA, sub-processor list, privacy policy and security page are public — no NDA, no sales call. | ✓ test_claim_legal_pages_published |
n/a | DPA 'by contacting the founders' | not described |
| The same approval tools are served over HTTP at /mcp for Claude.ai, ChatGPT and Smithery: tool schemas are public, a call without a key creates nothing and says where to get one, a timeout is never an approval. | ✓ test_claim_remote_mcp_needs_a_key_and_waits_bounded |
in-process only | MCP server offered; remote HTTP endpoint not described | remote MCP is their only interface (Claude Code, Cursor, Codex) |
Where they are ahead today: gotoHuman has an editable Agent Inbox (reviewers can edit the AI output before approving), Make.com and n8n nodes, Microsoft Teams announced, and an established customer base. Orako is open source (AGPL, Docker Compose), self-hostable and cheaper for a small team. If you need to edit the agent's answer before approving, gotoHuman fits better; if you want to run it yourself, Orako. If you need a record an auditor accepts on any plan, Telegram approvals and a price that does not grow with the number of approvers, we are the fit.
Price list, side by side
Public prices as of 2026-09-03, excluding VAT. We charge per decision, not per person: adding an approver never changes the bill.
| Raposa Aval | gotoHuman | Orako | |
|---|---|---|---|
| Free tier | €0 — 100 decisions / month, does not expire, unlimited approvers, audit export included | $0 — 1 seat, up to 300 reviews / month, 7-day history | open-source core, self-hosted — 5 users, 1 org, 1 project |
| Team price | €149 / month — 2,500 decisions, unlimited approvers | $99 / month — 6 seats, +$15 per extra seat | $12 per seat / month, 14-day trial |
| Next tiers | Business — custom, unlimited decisions, own domain, DPA to your policy | Growth $350 (20 seats) · Business $950 (50 seats) | Founder lifetime $196 one-time (50 users, offline licence) · self-hosted Enterprise |
| Audit log | hash-chained, exportable, on every plan | 'audit logs' listed on Business ($950) | searchable, attributed history; tamper-evidence not described |
| History retention | full retention on every plan | 7 days (Free) · 60 days (Team) · 90 days (Growth) · custom (Business) | not described |
| Pricing unit | decisions per month | seats + reviews | seats |
| Hosting | Germany (OVH Frankfurt), backups in France | 'secure European servers', GDPR, company in Berlin | hosted (region not stated) or self-hosted |
Repeat the run yourself:
git clone https://github.com/agentlabbusiness/dcescrypt-hitl && cd dcescrypt-hitl python3 -m venv .venv && .venv/bin/pip install -r requirements.txt .venv/bin/python -m pytest tests/test_claims.py -v
Sources for the competitor columns: gotoHuman — www.gotohuman.com/ · www.gotohuman.com/pricing · docs.gotohuman.com/ · docs.gotohuman.com/llms.txt; Orako — orako.io/ · orako.io/compare/humanlayer-alternative. Prices: raposa.group/#pricing · www.gotohuman.com/pricing · orako.io/. humanlayer dropped 2026-09-03: pivoted to a coding-agent IDE; approval API no longer on their site or docs (www.humanlayer.dev/ · www.humanlayer.dev/docs).
raposa