For most of the web's history, automated traffic had one job in the security stack: get identified and get stopped. Bot management grew up around that job. It sits at the edge of your infrastructure, scores requests, and blocks or challenges the ones that look abusive. It is very good at it, and you should keep it.
AI agents changed what applications need to know. A growing share of automated requests now come from agents acting for real customers: an assistant comparing plans, an agent filing a support ticket, a client calling your MCP server to finish a task. At the same time, many people use your product with an AI assistant beside them. These are not attacks. They are users, and they deserve the right experience rather than a block page.
That is the gap Proof of Actor fills. This page compares the two categories plainly so you can see where each one belongs.
The short version
| Bot management | Proof of Actor | |
|---|---|---|
| Main question | Should this request be stopped? | Who or what is acting, and what is the evidence? |
| Where it runs | At the edge, in front of your application | Inside your application, API or MCP server |
| Typical output | Allow, block or challenge; often a score | Human, Human + AI, Agent or Unknown, plus a basis |
| Treats AI-assisted people as | Usually indistinguishable from other people | A distinct class, Human + AI |
| Treats unclear traffic as | Often challenged or blocked | Unknown, with a fallback you choose per route |
| Who decides the response | The edge rule set | Your application code |
| Default behavior on install | Enforcement | Observation; nothing changes until you add a policy |
| Best at | Stopping credential stuffing, scraping abuse and volumetric attacks | Product, analytics and policy decisions for every actor |
The rest of this page explains each row.
Two different questions
Bot management answers a protection question. Its goal is to keep abusive automation away from your infrastructure, your accounts and your inventory. Every signal it collects serves that goal, and its output is a decision: let the request through, block it, or put a challenge in front of it.
Proof of Actor answers an understanding question. Its goal is to tell your application who or what is driving each interaction, so you can decide how to serve it. Its output is not a verdict on the request. It is a classification with its evidence:
- Human: the observable signals indicate human-directed interaction.
- Human + AI: a person directed the interaction with AI assistance that was declared or observed.
- Agent: automated or agent-origin interaction, supported by verifiable identity or a qualified inference.
- Unknown: the evidence does not support a reliable determination.
Each result also states its evidence basis: verified, declared, inferred or unknown. That is the information a product decision needs, and it is the information a protection score is not designed to carry.
Where each one runs
Bot management usually runs at the network edge or in a reverse proxy, in front of everything else. That position is exactly right for protection. It sees traffic early, absorbs attacks before they cost you anything, and keeps your origin servers clean.
Proof of Actor runs where your application logic lives: server middleware, Next.js, the edge layer you control, an approved browser integration, a generic HTTP API, or your MCP server. That position gives it access to what your application knows: which route is being called, which workflow it belongs to, whether your own assistant performed an action, and whether a client declared itself. See the integration paths for the full list.
Because the two run in different places, they do not compete for the same job. A request can pass your bot management, reach your application, and then receive actor context that shapes the response.
Scores versus evidence
Many protection products express their judgement as a score. A score is efficient for a block decision: pick a threshold, act above it. It is much less useful when the question is "what experience should this actor get?"
A score does not tell you whether a low-risk request came from a person, a person working with an assistant, or a well-behaved agent. It does not tell you which parts of the conclusion were verified and which were inferred. And it cannot express "we do not know" without forcing it into a number.
Proof of Actor keeps those distinctions. A verified agent result means a request signature was checked against a published key, for example through HTTP Message Signatures. A declared result means a client or your own application stated it. An inferred result is labeled as an inference. And Unknown is a first-class answer rather than a hidden default. Your team can read every result and see exactly what it rests on.
AI-assisted people are not bots
The fastest-growing group in most applications is people working with AI. They draft messages with an assistant, fill forms with help, and move through your product with an AI tool at their side. Protection tooling was not built to separate them from other people, and it has no reason to.
Your product often does. You may want to label AI-drafted support tickets so the right team handles them, measure how AI-assisted users move through onboarding, or offer them a smoother path. Proof of Actor gives that group its own class, Human + AI, and reports it only when the assistance is declared or observable through a supported integration. Read more in the AI-assisted interaction glossary entry.
Unknown is an answer, not a threat
Every classifier meets traffic it cannot explain. Protection systems are built to lean cautious, so unclear traffic often meets a challenge. That is a sensible choice at the edge.
Inside your application, a single cautious default is often the wrong choice. An unknown request to a public documentation page and an unknown request to change an account password deserve very different handling. Proof of Actor returns Unknown as its own result and lets you set the fallback per route: allow it on public pages, keep your existing checks on account changes, route it to review on high-impact actions. The guide on handling Unknown traffic walks through the patterns.
Who decides the response
With bot management, the rule set at the edge decides. That is efficient and keeps decisions consistent across your properties.
With Proof of Actor, your application decides. The product supplies the actor context; your code applies the policy. You can serve verified agents a structured API instead of pages built for people, keep the standard experience for human sessions, label AI-assisted submissions, and ask for stronger credentials on sensitive actions when your own conditions call for it. Policies are written per route, per actor class and per basis, and they live next to the rest of your business logic.
Observation first
Bot management is usually installed to enforce, because its whole value is stopping abuse.
Proof of Actor starts in observation mode. Installing it changes nothing about how your application behaves. You see your real actor mix by route, review the evidence, preview the effect of a policy against real traffic, and enforce only when you are ready, one route at a time. The guide on rolling out actor-aware policies safely covers the process.
How the two work together
The strongest setup uses both, each in its own layer:
- At the edge, bot management stops credential stuffing, scraping abuse and volumetric attacks.
- In your application, Proof of Actor classifies the traffic that gets through as Human, Human + AI, Agent or Unknown, with its basis.
- In your code, policies use that context to choose the experience: the structured API for a verified agent, the normal flow for a person, a label for an AI-assisted submission, an explicit fallback for Unknown.
- In your analytics, your team sees which routes and workflows each actor class uses, so product and security work from the same picture.
Recording the edge decision next to the actor result makes the picture complete: what protection did, and who was actually acting.
When to choose which
Choose bot management when your main problem is abuse: account takeover attempts, inventory hoarding, aggressive scraping or traffic floods.
Choose Proof of Actor when your main question is about your users: how much of your product agents already use, which agents call your API or MCP server, where AI-assisted people struggle, and which routes need an actor-aware policy.
Most teams that operate a production application, API or MCP server need answers to both, which is why the two belong in the same stack.
Get started
Proof of Actor is in private beta. Selected founding developer teams can receive up to 12 months of free access within agreed usage limits, with direct support from the team that builds it. Apply for early access and tell us about the application and the interaction you want to understand.