PERMISYN
Sandbox and live, on every plan

Every AI call asks permission first.

Permisyn decides whether a model call is allowed before it runs, then signs the decision into a receipt anyone can verify.

Start free Open a live dashboard
No card required Keys out of app code Signed, verifiable receipts

Ninety seconds, start to finish: an agent is provisioned through all seven steps, its passport signed, then opened in the registry — down to the audit log and one signed record of what it did.

Sits in front ofOpenAIAnthropicGoogle GeminiGroqMistralTogetherAzure OpenAIAny MCP server
How it works

Three steps, then it is running.

POST /v1/chat/completions17 checks
OpenAI
 
 
 
 
 
 
 
 
 
 
 
Anthropic
 
 
 
 
 
 
 
 
 
 
 
01

Change one line

Point your existing client at Permisyn. No rewrite, no wrapper SDK, and your provider keys stop living in application code.

Team headers
02

Hand your team one snippet

A shareable header bundle carries the team, the agent and its passport. A teammate fills in only their own name.

Public verification
03Same on both surfaces

Every decision comes back signed

Allowed or denied, each call leaves an Ed25519 receipt that anyone can check against your public key.

Run both and they join up: Intent binding matches a tool call to the model decision that asked for it.

The control room

Everything else it does, doing it.

Fleet Control

Stop everything, now

One button freezes every agent across the org, on the next call, with no redeploy. It works on every plan, including a lapsed trial.

Agent kill switch

Or kill one agent

Halt a single agent, one team, or one accountable user. Everything else keeps running.

Live and sandbox

A sandbox that cannot reach production

A separate partition with its own keys and its own data, one click away.

Enforced Secrets

Secrets it can never print

Register a secret and only its fingerprint leaves your browser — we never hold the plaintext. Any call carrying a match is redacted in flight, in both directions.

Public transparency log

Even we cannot backdate it

Seal the audit log's Merkle root and stamp it to Bitcoin through OpenTimestamps. Confirmation takes hours, so a fresh anchor honestly reads pending — and what it leaves behind is a standard .ots file, checkable with the public client rather than with us.

Compliance evidence

Framework readiness assessed against real traffic, exported as a signed attestation.

Dependency graph

Which agent calls what, built from the traffic rather than a diagram someone drew.

Waste ledger

What you paid for calls that broke your own rules, were discarded, or ran twice.

Chain of custody

Every multi-agent handoff signed, with each delegation provably narrower than its parent.

Everything the platform does
Verify us

Do not take our word for any of it.

Every receipt is signed with your org’s own Ed25519 key. Change one character below and the signature stops matching, in your browser, with no call to us.

Live · verified in your browser
Public key only. No Permisyn call. Edit anything below and watch.
Verifying…
01The receiptThree fields are yours to break
Run ID · signed
run_proxy_a1b2c3d4e5f6
Agent · signed
invoice-extractor
Model editable
Decision editable
Cost (USD) editable
Tokens · signed
1287
Change a clay field and watch exactly which bytes move with it.
Signed as well, and in those bytes
providerstarted_atduration_msauthorization_decisionteamuserpassportoutput_hash
02The exact bytes being verifiedCanonical JSON
{"agent_name":"invoice-extractor","decision":"allow","duration_ms":843,"metadata":{"authorization_decision":"allow","output_hash":"b1946ac92492d2347c6235b4d2611184b1946ac92492d2347c6235b4d2611184","passport":{"active":true,"allowed_models":"gpt-4o-mini"},"team":"finance","user":"maya@acme.com"},"model":"gpt-4o-mini","provider":"openai","run_id":"run_proxy_a1b2c3d4e5f6","started_at":"2026-07-28T09:14:22Z","total_cost_usd":0.0031,"total_tokens":1287}
03The signature over those bytesed25519
ed11 4646 5fd9 aa04 0471 448e 3aab 4666 58ae 2fb8 59fb bcd9 198c 1273 49b0 49f7 21ba e85a c5e2 8bdd 1c16 ab7e fbe6 d722 ffc9 0d3c ebf6 7f28 27ff dedf 20f6 a705
Checked against the org's public key only — MCowBQYDK2VwAyEAq2zk3LQKRkkBx9Pq9NLHjE2l65ztnfPlLxV3hUyCDn8=

Recomputing. Rebuilding the canonical payload and checking the signature over it.

Or don’t trust this page either.

The same check runs in your own shell — our script, your machine, your org’s public key, and no request to us in either direction. Change one number in the file and it says so.

01Get the verifier
$ curl -OJ \ https://api.permisyn.com/api/verify/cli
02Get any receipt
$ curl -s \ https://api.permisyn.com/api/verify/RUN_ID \ -o receipt.json
03Check it, offline
$ python3 verify_receipt.py receipt.json# exit 1 if one byte moved
Your terminal — verify_receipt.py
How offline verification works

Put a permission layer in front of your AI today.

Free to start, and the stop button works on every plan.

Start free Book a walkthrough