Verify an Alibi
Check a real Keelson Alibi in one command, with no account.
An Alibi is the public record of one purchase an AI agent made under a Keelson mandate. This guide checks a real one, from a purchase paid on the PayPal sandbox, against production.
Take a real Alibi
This Alibi was issued on 9 November 2026 and is committed to the repository as a test fixture, so it never changes under you.
# A real Alibi from the PayPal sandbox, countersigned by both TEEs ALIBI=https://raw.githubusercontent.com/DavidZapataOh/keelson-paypal/main/packages/alibi/test/fixtures/01M6ZWZJHWRRHQEYNJAT7NMSV8.alibiSend it to the verifier
POST /v1/alibis/verifyruns the browser verifier's checks against pinned trust roots and a public Arbitrum RPC. It needs no account, and it stores nothing.curl -sL "$ALIBI" \ | curl -s https://api.keelson.finance/v1/alibis/verify \ -H 'content-type: application/vnd.keelson.alibi.v1+json' \ -H "idempotency-key: docs-$RANDOM$RANDOM" \ --data-binary @- \Read the verdict
verified 2of2means both TEE legs, Intel TDX and AWS Nitro, countersigned this purchase, and every check that applies to it passed.| jq -r '"\(.verdict) \(.mode)"' # expect: ^verified 2of2$Do it from code
The same request from TypeScript. The idempotency key makes a retry the same request.
const res = await fetch("https://api.keelson.finance/v1/alibis/verify", { method: "POST", headers: { "content-type": "application/vnd.keelson.alibi.v1+json", "idempotency-key": crypto.randomUUID(), }, body: alibi, });See what was checked
Each check names one thing it proves: the mandate's passkey, both attestations, the countersignature, inclusion in the public log, the witnesses and the anchor on chain. Checks for features this purchase did not use, such as zero-knowledge proofs, are
absent."checks": [ { "id": "bundle.format", "status": "pass" }, { "id": "leaf.view", "status": "pass" },Trust no server
Download the same file and drop it on verify.keelson.finance. The checks run in your browser against roots pinned in its code; only the chain reads leave your machine.
# A real Alibi from the PayPal sandbox, countersigned by both TEEs ALIBI=https://raw.githubusercontent.com/DavidZapataOh/keelson-paypal/main/packages/alibi/test/fixtures/01M6ZWZJHWRRHQEYNJAT7NMSV8.alibi
# A real Alibi from the PayPal sandbox, countersigned by both TEEs
ALIBI=https://raw.githubusercontent.com/DavidZapataOh/keelson-paypal/main/packages/alibi/test/fixtures/01M6ZWZJHWRRHQEYNJAT7NMSV8.alibi
curl -sL "$ALIBI" \
| curl -s https://api.keelson.finance/v1/alibis/verify \
-H 'content-type: application/vnd.keelson.alibi.v1+json' \
-H "idempotency-key: docs-$RANDOM$RANDOM" \
--data-binary @- \
| jq -r '"\(.verdict) \(.mode)"'
# expect: ^verified 2of2$const alibi = await fetch(
"https://raw.githubusercontent.com/DavidZapataOh/keelson-paypal/main/packages/alibi/test/fixtures/01M6ZWZJHWRRHQEYNJAT7NMSV8.alibi",
).then((r) => r.arrayBuffer());
const res = await fetch("https://api.keelson.finance/v1/alibis/verify", {
method: "POST",
headers: {
"content-type": "application/vnd.keelson.alibi.v1+json",
"idempotency-key": crypto.randomUUID(),
},
body: alibi,
});
const { verdict, mode, checks } = await res.json();
console.log(verdict, mode); // verified 2of2{
"verdict": "verified",
"mode": "2of2",
"checks": [
{
"id": "bundle.format",
"status": "pass"
},
{
"id": "leaf.view",
"status": "pass"
},
{
"id": "qr.leaf",
"status": "absent"
},
{
"id": "mandate.challenge",
"status": "pass"
},
{
"id": "mandate.passkey",
"status": "pass"
},
{
"id": "mandate.credentials",
"status": "pass"
},
{
"id": "tee.attestation.tdx",
"status": "pass"
},
{
"id": "tee.attestation.nitro",
"status": "pass"
},
{
"id": "tee.countersign",
"status": "pass"
},
{
"id": "tee.registry",
"status": "pass"
},
{
"id": "policy.replay",
"status": "pass"
},
{
"id": "log.policy",
"status": "pass"
},
{
"id": "log.inclusion",
"status": "pass"
},
{
"id": "log.witnesses",
"status": "pass"
},
{
"id": "anchor.consistency",
"status": "pass"
},
{
"id": "anchor.root",
"status": "pass"
},
{
"id": "anchor.tx",
"status": "pass"
},
{
"id": "timestamps",
"status": "pass"
},
{
"id": "zk.c1",
"status": "absent"
},
{
"id": "zk.c3",
"status": "absent"
},
{
"id": "evidence.manifest",
"status": "pass"
},
{
"id": "evidence.web_fact",
"status": "absent"
},
{
"id": "evidence.checkout",
"status": "absent"
},
{
"id": "evidence.conversion",
"status": "absent"
},
{
"id": "paypal.ids",
"status": "pass"
},
{
"id": "card.authorizations",
"status": "absent"
}
]
}In your browser
The command above asks Keelson's API to run the checks. To trust no Keelson server at all, download the same Alibi and drop it on verify.keelson.finance. The page runs every check in your browser against trust roots pinned in its code; it reads the chain from a public Arbitrum RPC that you can replace with your own.
What each check means
Each row is one check the verifier runs, the party whose signature or record it rests on, and how it came out for this Alibi.
| Check | What it checks | Who answers for it | This Alibi |
|---|---|---|---|
bundle.format | Bundle format | Keelson | Passed |
leaf.view | Log leaf matches the bundle | Keelson | Passed |
qr.leaf | Matches the QR link | Keelson | Not used by this purchase |
evidence.manifest | Evidence manifest | Agent operator | Passed |
evidence.web_fact | Store's product endpoint, notarized (TLSNotary) | Keelson | Not used by this purchase |
evidence.checkout | Checkout total and its breakdown | Agent operator | Not used by this purchase |
evidence.conversion | Currency conversion within the mandate's spread | Agent operator | Not used by this purchase |
paypal.ids | PayPal ids | Keelson | Passed |
card.authorizations | Card charges approved by both TEEs | Keelson | Not used by this purchase |
mandate.challenge | Mandate challenge | User | Passed |
mandate.passkey | User's passkey signature | User | Passed |
mandate.credentials | Mandate credentials | Keelson | Passed |
tee.attestation.tdx | Intel TDX attestation | Keelson | Passed |
tee.attestation.nitro | AWS Nitro attestation | Keelson | Passed |
tee.registry | Signers registered on-chain | Keelson | Passed |
tee.countersign | TEE countersignature | Keelson | Passed |
policy.replay | Policy decision replayed with Cedar | Keelson | Passed |
log.policy | Log policy is the pinned one | Keelson | Passed |
log.inclusion | Included in the log | Keelson | Passed |
log.witnesses | Witness cosignatures | Witnesses | Passed |
anchor.consistency | Anchor consistent with the log | Keelson | Passed |
anchor.root | Root anchored on-chain | Arbitrum | Passed |
anchor.tx | Anchor transaction | Arbitrum | Passed |
timestamps | RFC 3161 timestamps | Timestamp authorities | Passed |
zk.c1 | Zero-knowledge proof | Keelson | Not used by this purchase |
zk.c3 | Signed by a registered user, anonymously | Arbitrum | Not used by this purchase |