Verify evidence, not permission
A passport identifies an agent and describes its authority. A decision receipt records what Passport decided about one request. Neither is a universal pass to execute a new action.
Read an artifact
Open Verify and paste a passport, decision receipt, capability
credential, or signed audit head. Use discovery at
/.well-known/passport.json to inspect issuer keys.
That endpoint is intentionally JSON for software, not a styled page.
The public verifier API accepts the same artifacts:
curl --fail-with-body \
-H 'Content-Type: application/json' \
--data-binary @artifact.json \
https://YOUR-PASSPORT-HOST/api/v1/verify
Replace the host with your trusted issuer. Send a bare artifact or
{"document": artifact}. Do not upload private keys or bearer tokens.
Four separate questions
- Identity: which issuer signed this agent or credential?
- Integrity: is the signature valid and bound to the expected subject, project, action and full request details?
- Current authority: is the agent active, is the grant current, and has this authorization expired, been revoked, or already been used?
- Execution: did the protected system enforce those checks before acting?
Offline signatures answer integrity, not live revocation or successful execution. Pin the intended issuer and obtain its keys from a trusted origin. Keep previous verification keys when rotating the issuer key.
Decision receipts
Recorded allow/deny decisions carry signed evidence. Pending requests do not yet have a final decision receipt, and malformed, unauthenticated or otherwise rejected input may receive only an error. Do not assume every HTTP response contains a receipt.
A signed denial is useful audit evidence but never permission. An allowed receipt still needs matching request details, a valid execution window, current authority and one-shot enforcement. Use Passport's relay for supported integrations. Custom executors must enforce their own equivalent boundary.
When a live check is unavailable, the result is incomplete, not silently valid.
The SDK's checkReceiptStatus can check live decision state, but it does not
atomically execute or consume a custom action. Custom runtimes need replay-safe
execution and must stop on failed or unavailable checks.
Security model
Keep signing keys and upstream credentials outside the model's access. Runtime
provenance is not hardware attestation; onBehalfOf is signed attribution by the
runtime, not authentication of that person.
Read the protocol for formats and security boundaries for trust assumptions. Exported audit chains establish integrity relative to a trusted signed head; they are not an independent public transparency log.