Skip to content

Reference

Terminology & Endpoint Glossary

ATF uses different terms at different layers — spec, API, CLI, and UI. The differences are intentional: each surface optimizes for its audience. This page maps every public term to its canonical meaning.

See the specification: The normative receipt format is defined in atf-spec → spec/receipt.md. The normative verification procedure is in spec/verification.md.

Why ATF Uses Different Terms at Different Layers

ATF documentation spans four surfaces, each with its own audience:

  • Specification (atf-spec) — normative, machine-precise, for implementors and auditors
  • API / product docs (this site) — human-friendly, for developers integrating the API
  • CLI — terse, for terminal output and scripting
  • UI / dashboard — uppercase status labels, for at-a-glance readability

When you see "approved" in an API response and "allow" in the spec, they represent the same decision viewed through different lenses. Neither is wrong — they are different layers of the same system.

Decision Terminology

The most visible terminology difference is how a policy decision is expressed.

SurfaceAllow valueDeny valueError valueField / context
Spec (normative)"allow""deny""error"decision.status
API response"approved""denied"receipt.decision
API booleantruefalsefalseallow (top-level)
CLI exit code02031process exit code
UI / dashboardALLOWEDDENIEDUNKNOWNstatus badge
Product spec (v1)"allowed""denied"result.status

Canonical source: spec/receipt.md defines decision.status as the normative enum: "allow" | "deny" | "error". All other surfaces are presentation-layer mappings of this value.

Hash Terminology

Two hash field names appear across ATF documentation. They describe the same cryptographic operation but appear at different layers.

TermSurfaceDefinitionAppears in
content_hashSpec & APISHA-256 hex digest of the JCS-canonicalized receipt, excluding the hash field itself. 64 lowercase hex characters.spec/receipt.md, API responses, verification procedure
receipt_hashProduct docs & signing layerSame SHA-256 computation. Used in the product-level receipt spec (v1), the signing endpoint, and execution receipts for on-chain anchoring.receipt-specification-v1, anchoring-roadmap, signing API

In practice, content_hash and receipt_hash refer to the same value — a deterministic SHA-256 over the canonical receipt data. The spec uses content_hash; the product layer uses receipt_hash when the hash is an input to signing or on-chain anchoring.

Concept Terminology

Term pairDistinctionWhen you will see each
receipt vs. proofReceipt is the JSON artifact. Proof is the concept of evidence.Spec and API always say “receipt.” Tutorials use “proof” when explaining why receipts matter.
verification vs. trustVerification is the deterministic 5-step process for confirming receipt integrity. Trust is the design philosophy (zero-trust by default).“Verification” in technical docs and CLI. “Trust” in architecture and threat-model discussions.
simulate vs. protectSimulate evaluates policy without enforcement (advisory). Protect enforces the decision and stores a receipt (authoritative).Quickstart uses simulate. Production flows use protect. See the endpoint table below.

Endpoint Comparison

Two primary intent-evaluation endpoints appear in public tutorials. They serve different roles.

EndpointModePurposeAudienceWhere documented
POST /v1/bot/protectAuthoritativeEnforces policy. Returns allow boolean + receipt with content_hash. The receipt is stored and verifiable.Production botsFirst Protected Trade
POST /api/simulateAdvisoryEvaluates policy without enforcement. No receipt is stored. Rate limited (30 req/min public, 120 keyed).Quickstart & sandbox5-Minute Quickstart
POST /v1/receipts/verifyVerificationVerifies receipt integrity by recomputing and comparing content_hash. Returns valid: true/false.Any verifierVerification

MCP equivalents: protect_transaction (authoritative), simulate_transaction (advisory), verify_receipt (verification). See MCP Integration for tool details.

Which Term Should I Use?

If you are…Use these terms
Writing a spec-compliant verifierdecision.status, content_hash, "allow" / "deny" / "error"
Integrating the REST APIallow (boolean), receipt.decision, receipt.content_hash
Scripting with the CLIExit code 0 (allow) or 20 (deny). Use atf bot protect --stdin
Building UI that displays decisionsALLOWED / DENIED / UNKNOWN (uppercase badges)
Calling the signing or anchoring APIreceipt_hash (same value as content_hash)