Skip to main content
Retrieve a single decision receipt with complete audit data — evidence, exclusions, conflicts, channel contributions, and token accounting.

Request

GET /v1/receipts/{receipt_id}
receipt_id
string
required
UUID of the receipt.

Response

id
string
Receipt UUID.
query
string
The original query.
timestamp
string
ISO 8601 creation time.
workspace_id
string
Workspace scope.
actor_id
string
Actor who made the request.
evidence
Citation[]
The citations that made it into the context pack.
channel_contributions
object[]
How many candidates each retrieval channel produced and how many were selected.
exclusions
object[]
Every span that was considered but excluded.
conflicts
object[]
Detected contradictions between included evidence spans.
token_accounting
object
Exact token budget breakdown.
confidence
float
Confidence score (0.0 - 1.0).
abstain_flag
boolean
Whether the system abstained.
abstain_reason
string | null
Reason for abstention.
assumptions
string[]
Any degradation notes (e.g., “Semantic search unavailable”).
policy_summary
object
Policy that was applied.
pack_hash
string
SHA-256 hash of the context pack output.

Example

receipt = client.get_receipt("r1a2b3c4-...")

# Token budget breakdown
acct = receipt["token_accounting"]
print(f"Budget: {acct['budget']}, Used: {acct['total_used']}, Remaining: {acct['remaining']}")

# What was excluded and why
for exc in receipt["exclusions"]:
    print(f"  Excluded: {exc['reason']}{exc['detail']}")

# Detected conflicts
for conflict in receipt["conflicts"]:
    print(f"  Conflict: {conflict['description']}")
Response
{
  "id": "r1a2b3c4-...",
  "query": "What is the current enterprise discount cap?",
  "timestamp": "2026-03-09T14:31:00Z",
  "workspace_id": "ws_acme",
  "actor_id": "user_alice",
  "evidence": [ "..." ],
  "channel_contributions": [
    { "channel": "lexical", "candidate_count": 12, "selected_count": 4, "weight": 0.45 },
    { "channel": "semantic", "candidate_count": 10, "selected_count": 3, "weight": 0.35 },
    { "channel": "temporal", "candidate_count": 8, "selected_count": 2, "weight": 0.20 }
  ],
  "exclusions": [
    {
      "span_id": "...",
      "artifact_id": "...",
      "reason": "BUDGET",
      "detail": "Exceeded token budget after 6 spans",
      "relevance_score": 0.31
    },
    {
      "span_id": "...",
      "artifact_id": "...",
      "reason": "POLICY",
      "detail": "Missing required RBAC tag: finance",
      "relevance_score": 0.78
    }
  ],
  "conflicts": [
    {
      "id": "...",
      "claim_a": { "artifact_id": "...", "span_id": "...", "content_hash": "..." },
      "claim_b": { "artifact_id": "...", "span_id": "...", "content_hash": "..." },
      "description": "Numerical conflict: 'cap at 15%' vs 'raised to 18%'",
      "resolution": null,
      "resolved_by": null
    }
  ],
  "token_accounting": {
    "budget": 2048,
    "prefix_tokens": 64,
    "working_set_tokens": 283,
    "total_used": 347,
    "remaining": 1701
  },
  "confidence": 0.87,
  "abstain_flag": false,
  "abstain_reason": null,
  "assumptions": [],
  "policy_summary": { "rbac_required": ["pricing"] },
  "pack_hash": "sha256:..."
}

Exclusion Reasons

ReasonDescription
BUDGETSpan was relevant but the token budget was full
POLICYSpan was blocked by the request’s access policy
REDUNDANCYSpan was too similar to an already-included span
LOW_RELEVANCESpan scored below the relevance threshold
PRIVATESpan was marked private via feedback
MARKED_WRONGSpan was flagged as incorrect via feedback
OUTDATEDSpan was flagged as outdated via feedback