Everything about oakallow on one page. Security infrastructure for AI agents.
oakallow is a hosted security service for AI agent tool execution. You reach it through the REST API or the MCP connector — same governance, two surfaces.
What it does:
oakallow is not a monitoring platform or an AI agent framework. It is the security layer that sits between your agent and the tools it wants to run.
Who it is for:
Most developers are integrated within an hour. There are two integration paths and you can use either or both.
Shared setup (both paths):
REST API path:
MCP connector path:
The dashboard includes a Quickstart guide and an API Builder that generates ready-to-run seed scripts.
Yes. oakallow has companion apps on the App Store and Google Play. The mobile apps focus on the things you need on the go: signing in with a passkey, reviewing and deciding on approval requests, viewing activity, and managing your credit balance.
What the apps do:
What the apps do not do:
Each mobile install is treated as its own device. The first time you sign in to the app, your passkey is verified through whatever credential authority owns it (iCloud Keychain on iOS, Google Password Manager on Android, or a hardware security key). If you have a passkey on a different device family, sign-in still works using WebAuthn cross-device flow (your phone shows a QR code that you scan with the device that holds the passkey). For everyday convenience, the app may suggest adding a passkey on the current device after your first sign-in.
oakallow has two API key tiers:
Each key is scoped to a single organization. API keys are SHA-256 hashed at creation. The raw key is shown once and cannot be retrieved.
An Organization represents your application or project. Everything in oakallow is scoped to an organization: tools, tenants, resources, permission rules, and API keys.
If you are building a single AI agent, you will have one organization. If you are building a multi-tenant platform where each of your customers has their own AI agent, each customer can be a Tenant within your organization, with separate permission rules.
A Tenant represents one of your customers or end-users within your organization.
Tenants enable multi-tenant permission management. You can define permission rules that are scoped to a specific tenant, so Customer A might have different tool permissions than Customer B, all within the same organization.
Tenants are optional. If your AI agent serves a single team, you can skip tenants entirely and define permissions at the organization level.
oakallow uses a 12-level resolution chain to determine the permission for any tool execution. The chain evaluates from most specific to least specific:
Tenant-scoped rules (if a tenant is specified):
Org-scoped rules (same 8 levels without tenant):
Fallbacks:
The first match wins. If nothing matches and the tool is not pre-approved, the fail-safe is always "requires approval." Permission resolution happens at the edge via Cloudflare Workers with single-digit millisecond resolution.
Every permission check returns one of three results:
When a permission check returns "requires_approval," your system creates an approval request via the REST API.
The approval request includes the tool name, parameters, reasoning, and any context your agent wants to provide.
oakallow then sends a webhook to your configured URL with the approval details (event: approval.created). Your system routes this notification to the appropriate reviewer via Slack, Teams, PagerDuty, email, or any channel you choose.
The reviewer approves or denies via the oakallow dashboard or mobile app, or your system calls the decide endpoint directly. oakallow sends another webhook with the decision (event: approval.decided).
Your agent receives the decision via the webhook or by polling the approval status endpoint. Once approved, you mint an execution token and proceed.
Approvals have a configurable timeout (default: 1 hour). If no decision is made within the timeout, the approval expires and the tool does not execute.
Configure a webhook URL per organization in the Settings page. oakallow sends two types of events:
Payloads are signed with HMAC-SHA256 using your organization's webhook secret. Verify the X-Oakallow-Signature header to confirm the request is from oakallow.
Webhooks are fire-and-forget from oakallow's side. If your endpoint is unreachable, the approval still exists and can be polled via GET /v1/approvals/:id as a fallback.
Add a Slack notification channel from Settings → Notification Channels. Click "Add to Slack" to authorize the Oakallow Slack app in your workspace and pick a channel — we fill the webhook URL in for you. Manual paste is also supported if you would rather create your own incoming webhook in Slack.
Once configured, your channel receives a Block Kit card for each approval event:
Each card shows the tool name, a short PII-scrubbed reason, and an oakallow reference id (REF-XXXXXXXX-XXXX). We never send tool parameters, customer data, or other identifying details to Slack.
This is alerting only. Approval decisions are made exclusively in the Oakallow mobile app with enforced multi-factor authentication. Slack delivers the alert; the mobile app handles the decision. This separation keeps your audit trail intact and ensures every decision is signed by a verified, authorized approver — never by someone who happens to have access to a Slack channel.
You can scope each Slack channel to fire team-wide (every approval), only when Level 1 approvers are being asked, or only when Level 2 approvers are being asked. The Slack app requests the incoming-webhook scope only — it cannot read messages, send DMs, or access workspace data.
Add a PagerDuty notification channel from Settings → Notification Channels. You will need three things from your PagerDuty account:
When an approval event fires, Oakallow creates an incident on your PagerDuty service. The Service's Escalation Policy decides who gets paged. Each incident shows the tool name, the oakallow reference id, and a short PII-scrubbed reason. We never send tool parameters, customer data, or end-user identities to PagerDuty.
This is alerting only. Approvals are still decided exclusively in the Oakallow mobile app with enforced multi-factor authentication. PagerDuty pages the right human; the mobile app is where the decision is made and signed.
The API Key is stored encrypted at rest and is write-only after creation — we never display it back to you. To rotate, edit the channel in Settings, paste the new key, save, and click Test to confirm delivery.
Notification payloads are intentionally minimal. Each event contains:
What we do NOT send:
The purpose of notifications is to tell you that a decision is needed, not to relay the data the decision is about. Anything sensitive stays inside oakallow itself — open the request in the dashboard or the mobile app to see the full context.
The destinations you configure (Slack workspaces, PagerDuty services, webhook endpoints) are services you choose. Their handling of these notifications is governed by their own data policies, not oakallow's. You are responsible for what you configure.
Yes, by setting the permission to "allowed" for that tool. Tools with "allowed" permission do not go through the approval workflow.
However, automatically approving tools that the permission system flagged as "requires_approval" is a violation of the Acceptable Use Policy. The purpose of oakallow is to ensure human oversight where you have defined it. Building systems that circumvent approval requirements defeats the security model.
oakallow supports optional two-level approvals, where a request escalates from a first approver to a second approver before a tool runs.
Every approval request has an expiration. If no decision is made before it expires, the request is auto-marked as expired and the tool does not execute. Expired requests stay visible on the dashboard's Recent Activity and Activity feeds so nothing disappears silently.
When you register a tool, oakallow asks you to declare four MCP annotations: read-only, destructive, idempotent, and open-world. These are the same annotations Anthropic's Connector Directory and OpenAI's Apps SDK both require on every tool an AI agent can call. They tell the agent whether the tool mutates data, whether repeat calls are safe, and whether the effects can be undone.
Oakallow does not vouch for the accuracy of these annotations. We relay what you declared, unchanged, to every MCP client that connects. That is why we ask you to explicitly acknowledge at registration time that the annotations describe the tool accurately. Incorrect annotations can cause an AI agent to misjudge risk: for example, ChatGPT skips confirmation prompts for tools marked read-only, so flagging a write action as read-only would bypass a safety gate. Anthropic's review requires accurate annotations before a connector can be listed in the Directory.
When an MCP client (Cowork, Claude Desktop, ChatGPT, any compatible agent) calls check_permission for a tool name oakallow doesn't recognize for your org, we auto-register it for you. The new tool lands as a draft with default_permission=requires_approval, and you triage it from the dashboard's Tools page under Recently Discovered.
Your agent doesn't have to wait for you. The check_permission call comes back immediately with requires_approval, your agent's tool dispatch creates an approval request, and you handle the actual decision when the notification reaches you. The catalog grows as your agent works, nothing executes without your sign-off.
A few details worth knowing:
This is what makes oakallow + Cowork (or any MCP agent) work without pre-registering anything. Connect once, run your agent, triage what shows up.
An execution token is a single-use, HMAC-signed proof that a tool execution was authorized.
After confirming a tool is allowed (via permission check or approval), your system calls the token minting endpoint. The token contains a nonce that can only be used once, preventing replay attacks.
Tokens provide cryptographic evidence that:
oakallow logs every significant action:
All logs include timestamps and are queryable through the dashboard Activity page and the API. Logs are scoped to your developer account.
Billable operations (charged at $0.005 per call with a Standard key):
Free operations (Management key):
API keys go through a multi-layer security process:
If a key is compromised, revoke it immediately from the dashboard. A new key can be created in seconds.
Yes. oakallow is a security platform, so passkey-based MFA is required on every account. There is no opt-out.
How it works:
Why passkeys and not TOTP codes:
A note on cross-platform sync. Passkeys created in Apple devices stay in iCloud Keychain. Passkeys created in Google or Chrome stay in Google Password Manager. The two ecosystems do not sync to each other. If you create a passkey on an iPhone and then try to sign in on an Android phone, sign-in still works through WebAuthn cross-device flow (your Android shows a QR code that you scan with the iPhone), but for daily convenience we recommend enrolling at least one passkey per device family.
If you lose access to every enrolled passkey, see the "What if I lose my passkey?" question below.
Recovery codes are your backup if you lose access to every enrolled passkey. They are single-use, 26-character codes generated automatically the first time you enroll a passkey on your account. Each account gets 10 codes.
When they are generated:
How to use them:
Where to store them:
If you run out of recovery codes and have lost access to every passkey, contact support@oakallow.io from the email on your account and we will verify ownership and reset your passkey requirement.
You have three recovery paths in order of speed.
Fastest: redeem a recovery code.
If you have a second passkey on another device:
If you have access from another device, sign in with that one, then go to the Security page and remove the lost passkey. Add a new passkey on your replacement device from the same page.
Last resort: contact support.
To make future recovery easier, we strongly recommend enrolling at least two passkeys (for example one on your phone and one on your laptop, or one in a password manager and one on a hardware key) and keeping your recovery codes in a separate location from your devices. You can add additional passkeys any time from the Security page.
Permission resolution happens at the edge in a Cloudflare Worker.
Permission rules are stored in Cloudflare D1, so when a permission check request arrives, the Worker can resolve it locally without making a round-trip to a separate backend. This delivers very fast decisions and keeps the policy path close to the request path.
The Cloudflare Worker owns the auth and permission surface, while the dashboard and management APIs use the same D1-backed data model, so rule changes stay in sync across the product.
oakallow runs entirely on Cloudflare:
User authentication is native. Passkeys (WebAuthn) and email one-time codes are issued, verified, and stored by oakallow itself, not by a third-party identity provider. Recovery codes are SHA-256 hashed and stored in our database.
The MCP connector (which integrates oakallow with Claude and ChatGPT) is also fully self-hosted. We run our own OAuth 2.1 authorization server on api.oakallow.io using the open-source @cloudflare/workers-oauth-provider library, with PKCE S256 required, refresh-token rotation, dynamic client registration, and a consent screen on our own domain. Compliance details are on our /docs/oauth page.
Supporting services such as Stripe (web billing), Apple StoreKit and Google Play Billing (mobile in-app purchases), Apple Push Notification Service and Firebase Cloud Messaging (mobile push), and Resend (transactional email) plug into that core architecture.
Internal service communication uses signed headers with a 30-second drift window for timing-safe validation where applicable.
The oakallow MCP connector at api.oakallow.io/mcp implements OAuth 2.1 BCP and the MCP Authorization Specification (2025-03-26). PKCE with S256 is required on every authorization, the implicit flow and resource-owner password grant are not accepted, refresh tokens rotate on every use, redirect URIs are exact-matched, and every authorization, token issuance, and revocation is recorded in our audit log.
The full endpoint table, scope descriptions, supported flows, token lifetimes, revocation paths, and per-claim compliance evidence are documented at oakallow.io/docs/oauth. That page is the canonical reference we share with AI-platform review teams when submitting connector listings.
oakallow uses a prepaid credit model.
You purchase credits via Stripe on the web, or via Apple In-App Purchase or Google Play Billing in the mobile apps. Credits are consumed by billable API calls at $0.005 per call. New accounts receive $5.00 in free credits, which expire after 30 days.
Credit packages:
When your balance reaches zero, billable API calls are rejected until you add more credits. Management operations are always free regardless of balance.
Yes. Contact support@oakallow.io to request account deletion.
Upon deletion, your API keys, passkeys, and recovery codes are immediately revoked, and your personal data is removed within 30 days. Billing records may be retained as required by law.