Intents & ReceiptsReceipt Verification

Receipt Verification

A Receipt is the short-lived proof your agent or gateway verifies before execution. In Open Preview the token is returned as permit_token, but it carries Receipt V2 claims for the exact action, parameters, policy, proof tier, key id, and expiry.

Online Verification

const result = await fetch("https://api.silentauth.ai/api/intents/permit/verify", {
  method: "POST",
  headers: {
    "Authorization": "Bearer " + process.env.SILENTAUTH_PROJECT_KEY,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    permit_token: receiptToken,
    action: "production.deploy",
    parameters: { environment: "production", version: "2026.06.18" },
  }),
}).then((res) => res.json());

if (!result.valid) {
  throw new Error("SilentAuth receipt is not valid for this action");
}

await deployToProduction();

Receipt V2 Claims

The verifier returns the claims your execution code should enforce or log.

{
  "valid": true,
  "intent_id": "int_abc123",
  "action": "production.deploy",
  "risk_tier": "high",
  "receipt_version": 2,
  "params_hash": "sha256:8f4...",
  "policy_hash": "sha256:19d...",
  "proof_tier": "stub_vinacfm_l3",
  "kid": "local-hmac-v2",
  "expires_at": "2026-06-18T21:05:00.000Z"
}

Claim Reference

ClaimTypeDescription
receipt_versionnumberReceipt schema version. Use 2 for the current preview.
params_hashstringHash of the exact action parameters.
policy_hashstringHash of the policy decision context.
proof_tierstringnone, human_approval, stub_vinacfm_l3, vinacfm_l3, qr_l2, or nfc_l3.
kidstringSigning key id used for key rotation.
expires_atstringReceipt expiry timestamp.
revocation_statusstringactive, revoked, or unknown.

Validation Failure Reasons

expired

Receipt has passed its expiry time.

tampered

Token signature does not verify.

action_mismatch

Receipt action does not match the intended action.

params_mismatch

Receipt params_hash does not match the action parameters.