The proof bundle
A signed delegation chain binds the principal, agent key, scope, constraints, and expiry. Sub-delegation requires an explicit identity:delegate grant.
Portable authorization across agent trust boundaries
Ratify lets a receiving API, tool, or agent platform independently verify who authorized an agent, what it may do, and for how long, even when the agent crosses an organizational or system boundary. The principal signs a portable proof, it travels with the agent, and the receiver verifies it locally.
DelegatePresentVerifyone verification, rendered
Delegation chain, signed by each issuer
operations → assistant agent → scheduling agent
meeting:* + identity:delegate, narrowed to meeting:attend
Signed by a principal. Bound to an agent key. Independently verifiable by the receiver.
01
A principal grants an agent narrow authority: an allowed scope, constraints, and an expiry.
Delegation, signed by the principal
meeting:* + identity:delegate · expires 14:30
sig: Ed25519 ✓ · ML-DSA-65 ✓ (both signatures must verify)
issued by Operations · subject: assistant-agent
02
The proof travels with the agent. At the boundary, the receiver issues a fresh challenge and the agent countersigns it with the delegated key, so a copied proof cannot act as a bearer credential.
trust boundary
challenge nonce, fresh, single use
countersigned with the delegated key ✓
03
The receiver checks signatures, delegation continuity, scope, constraints, freshness, and its revocation policy before applying local policy. Verification runs locally when trust anchors and sufficiently fresh revocation state are already in hand.
Every code above comes from the verifier: a specific status when available, otherwise the machine-readable reason returned with invalid. Nothing on this site invents a code.
One proof model, many boundaries
APIMCP serverA2A agentvoice agentmeeting agentrobot or droneThe same delegation, presentation, and verifier algorithm runs wherever an agent’s request crosses a trust boundary. Two of those boundaries are playable below.
A live protocol challenge
Every mission below runs a real signed Ratify proof through the real TypeScript verifier, in your browser, against canonical fixtures from the protocol repository. Try to get authority the principal never granted. Each attempt returns the exact protocol result, the receiver’s own policy decision, and the measured verification time.
Now do it in your stack
Every verdict in the lab came from the published TypeScript SDK. The receiving side is a dozen lines: decode the proof, verify the delegation chain against your own clock and revocation list, and route on the exact status.
The verifier returns the effective scope the chain actually grants, after intersecting every hop. Expected result for a valid presentation: identity_status: "authorized_agent", with the effective scope the chain actually grants. Anything else arrives as a deterministic reason you can log, alert on, and audit.
Reference SDKs in Go, TypeScript, Python, Rust, and C/C++. Same wire format, same statuses, byte-identical across all five.
npm install @identities-ai/ratify-protocolimport { verifyBundle, decodeProofBundle } from "@identities-ai/ratify-protocol";
// The receiver's side, before executing any agent-requested action:
const bundle = decodeProofBundle(request.body.proof);
const result = await verifyBundle(bundle, {
required_scope: "meeting:attend",
now: Math.floor(Date.now() / 1000),
is_revoked: (certId) => revocationList.has(certId),
});
if (result.identity_status !== "authorized_agent") {
return reject(result.identity_status, result.error_reason);
}
executeAction(); // evidence verified, locallyAn external agent requests a consequential action across your trust boundary. Follow that one request through the layers you already run. Each does its job. Across an external trust boundary, the receiver can still lack portable evidence of the agent’s delegated authority.
Establishes who the principal is and governs your organization’s identities.
Get the agent’s application in the door, with tokens your identity provider controls.
Decides your local rules, given inputs it trusts.
Who delegated what, to which agent key, under which limits. Checked locally, before anything executes.
Or it does not, with the exact reason.
Ratify gives the receiving system cryptographic evidence that this agent was delegated this exact authority, not just a token saying the application was allowed in.
Keep your IAM, OAuth, MCP, A2A, and policy engine. Ratify adds portable proof of delegated authority at the point of action, and your system verifies it before executing.
Execute or reject an external agent’s request on evidence you can verify yourself.
Your API, MCP server, or platform executes actions requested by agents you do not operate. Ratify gives you a deterministic check of the agent’s delegated authority, evaluated locally against your own trust anchors and revocation policy, before the action runs.
Prove and limit what your agents may do outside your boundary.
Scope, constraints, and expiry are signed into the delegation, and revocation is a list you publish. The natural starting point is one organization on both sides: constrain your own agents, verify them at your own boundaries, then extend the same proofs to partners.
Technical architecture
Ratify’s cryptographic core is deterministic across five reference SDKs. The verifier runs where the action is received: an API gateway, MCP server, agent platform, edge service, or physical system.
A signed delegation chain binds the principal, agent key, scope, constraints, and expiry. Sub-delegation requires an explicit identity:delegate grant.
The receiver checks hybrid signatures, chain continuity, proof of possession, scope, constraints, freshness, and revocation before its own policy runs.
Verify the full bundle once at session start. Repeated turns use a session token and fresh challenge signature rather than resending the complete chain.
You choose trust anchors, revocation freshness, policy hooks, and audit retention. Ratify defines the interoperable proof; those operational decisions stay with you.
63
canonical fixtures
byte-identical across SDKs
5
reference SDKs
Go · TS · Python · Rust · C/C++
0.39
ms verify, compiled
depth 1 · Apple M2 Pro
alpha.15
current release
open spec, CC-BY-4.0
Sources: specification, benchmark methodology, repository.
We are working with agent platforms and receiving systems to make delegated authority portable across trust boundaries. A design partnership starts at one real authorization point, then tests the trust, revocation, policy, and audit model under your operating conditions.
We ask for deployment context so the first conversation can be technical and specific.
High-risk deployments should fail closed when sufficiently fresh revocation state is unavailable. The full threat model and trust bootstrap modes are in the specification’s security considerations.
Not from the protocol, and the specification says so plainly. A signature proves possession of a key, never that the key belongs to the name attached to it. The verifier chooses its trust anchors through an explicit deployment decision: pin partner keys during onboarding, resolve them through a fail-closed registry read, or accept a self-published key once and require signed rotation statements from then on. A key that arrives with the proof itself is never a trust root. If a vendor tells you their protocol solved this, ask them where the first key came from.
Verification runs locally; revocation state has an age, and the verifier owns that dial. Issuers publish signed revocation lists and push updates; verifiers bound how stale a view they will act on, sized to the risk of the action. When revocation state is required and unavailable, the verifier fails closed rather than assuming nothing was revoked. For irreversible actions, a forced live check is the recommended posture, and short certificate lifetimes bound the exposure either way. This is the same tradeoff every token system carries; Ratify makes it explicit policy instead of a surprise.
Start where you receive
One authorization point is enough to start: decode, verify, route on the status. The proof travels; no vendor has to.
Supported by startup programs from