Retrieve a single decision receipt with complete audit data — evidence, exclusions, conflicts, channel contributions, and token accounting.
Request
GET /v1/receipts/{receipt_id}
Response
Actor who made the request.
The citations that made it into the context pack.
How many candidates each retrieval channel produced and how many were selected.
Channel name: lexical, semantic, or temporal.
Candidates produced by this channel.
Candidates that made it into the final pack.
Channel weight used for fusion.
Every span that was considered but excluded.
UUID of the excluded span.
UUID of the source artifact.
One of: BUDGET, POLICY, REDUNDANCY, LOW_RELEVANCE, PRIVATE, MARKED_WRONG, OUTDATED.
Human-readable explanation.
The span’s relevance score when it was excluded.
Detected contradictions between included evidence spans.
First conflicting span reference.
Second conflicting span reference.
Human-readable conflict description.
Resolution if one exists.
Exact token budget breakdown.
Tokens used by pinned/authoritative content.
Tokens used by query-specific evidence.
Total tokens in the pack.
Confidence score (0.0 - 1.0).
Whether the system abstained.
Any degradation notes (e.g., “Semantic search unavailable”).
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']}")
{
"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
| Reason | Description |
|---|
BUDGET | Span was relevant but the token budget was full |
POLICY | Span was blocked by the request’s access policy |
REDUNDANCY | Span was too similar to an already-included span |
LOW_RELEVANCE | Span scored below the relevance threshold |
PRIVATE | Span was marked private via feedback |
MARKED_WRONG | Span was flagged as incorrect via feedback |
OUTDATED | Span was flagged as outdated via feedback |