For builders · AI apps · Agents

How does an AI agent know who it is talking to?

Today, mostly, it does not. Pupul is an identity and continuity layer for AI applications. A person grants your app a scoped, signed piece of their own profile, and your app verifies it against public artifacts, with our servers out of the loop. The developer tier is free to start.

Nothing here is a promise. Read the public keys, the revocation list, or the ledger checkpoint yourself.

The problem

Every session with your app
starts as a stranger.

An AI application gets a name field, maybe an email, maybe a login. None of that tells the app whether there is a real, continuous person behind the account, and none of it carries the person's consent about what the app may know.

01 / No presence signal

Accounts are free to mint

An email address proves control of an inbox, nothing more. Your app has no way to ask whether the account is attached to a person who has been around and active over time.

02 / No continuity

Yesterday's user might not be today's

Even with a valid login, your app cannot tell whether the account behind it is the same continuous presence it was last month, or whether something about it has changed in a way worth knowing.

03 / No consent trail

Whatever you store, you own the risk

Apps that build their own user histories hold data the person never scoped and cannot revoke. A grant model flips that: the person hands you exactly what they agreed to, and it expires on its own.

The four claims

The registry answers four questions,
and shows its work.

Every claim arrives with the provenance that produced it. And when a claim cannot be established, the answer is null, never false. Absence of evidence is not treated as an accusation.

is_human

A presence signal over a growing profile, not a calibrated biometric. It reflects that a person has been present and active over real time. When it cannot be established, it is null, never false.

is_continuous

Whether the profile behind the grant has an unbroken record of activity over time. Continuity is made of time that actually passed, which is why it is hard to fake.

has_deviated

Whether the profile's recent pattern departs from its own history. A signal, with provenance attached, that the receiving app can weigh however its own policy requires.

stands_behind

Whether the person actively stands behind this grant right now. Revocation is free, immediate, and published to a list anyone can read, so this claim is checkable by anyone.

Verify offline

Your app verifies the grant. Our servers stay out of the loop.

A Pupul grant is a scoped, signed piece of a person's own profile that a receiving app can verify offline against published JWKS keys, a public revocation list, and signed ledger checkpoints.

That single sentence is the whole architecture. The person decides what to share at the moment of sharing. The grant is scoped at the door, so it carries only the claims the person agreed to release. It expires on its own after fifteen minutes, so a leaked grant goes stale before it becomes a liability. And it never carries what the person wrote. Your app receives claims about the profile, with provenance, and never the journal-level content underneath.

Verification uses three public artifacts. First, the signature on the grant checks against our published JWKS keys. Second, the grant checks against a public revocation list, so a grant the person has withdrawn fails cleanly. Third, signed ledger checkpoints let you confirm the profile's record is the one that was committed, not one rewritten after the fact. All three artifacts are published at stable URLs, which means your app can cache them and run the whole check without a single call to Pupul. If our service disappeared tomorrow, grants already issued would still verify against the artifacts already published.

This matters for agents in particular. An agent acting across services needs an answer to "who authorized this, and does that authorization still stand" that does not depend on a vendor being awake. A verification path built on public keys, a public revocation list, and signed checkpoints gives the agent that answer wherever it runs.

Sign in with Pupul

A login your users own, built on plumbing you already know.

Sign in with Pupul is standard OAuth with ES256 tokens, and every completed login adds a dated check-in to the person's profile.

For you, integration looks like any other OAuth provider: a redirect, a token, a verification against published keys. For the person, it is different in one important way. Each completed sign-in writes a dated check-in to the profile they own, so the act of logging in grows their own record rather than only feeding yours. The person scopes the grant at the door, can revoke your app's access at any time, and every revocation is published where anyone can read it. Your app is never guessing about standing consent.

The developer tier is free to start. You can integrate the sign-in, request grants, and verify claims before paying anything.

FAQ

The questions builders actually ask.

How does my app verify a grant?
Check the signature against the published JWKS keys, check the grant against the public revocation list, and confirm the profile's record against signed ledger checkpoints. All three artifacts are public, so the whole check runs offline, with Pupul's servers out of the loop.
What exactly does the registry return?
Four claims: is_human, is_continuous, has_deviated, and stands_behind. Each one arrives with the provenance that produced it, so your app can see why the answer is what it is and apply its own policy.
Is is_human a proof of humanity?
No, and we do not call it one. It is a presence signal over a growing profile, not a calibrated biometric. When the claim cannot be established, the answer is null, never false. Treat null as "unknown," because that is what it means.
How long does a grant last, and what does it carry?
A grant is scoped at the door by the person, expires on its own after fifteen minutes, and never carries what the person wrote. Your app gets claims about the profile, not its contents.
What does Sign in with Pupul look like to integrate?
Standard OAuth with ES256 tokens. If you have integrated any OAuth provider, you know the shape. Every completed login also adds a dated check-in to the person's own profile.
What does it cost to build on this?
The developer tier is free to start. The public keys, revocation list, and ledger checkpoints are published for anyone to read, whether or not they ever pay us.
Start free

Give your app an answer to "who is this?"

Open the dashboard, see a profile and its grants working end to end, and verify a grant against the public artifacts yourself. The developer tier is free to start.