Every paid tool call accepts two optional audit fields:Documentation Index
Fetch the complete documentation index at: https://docs.oneshotagent.com/llms.txt
Use this file to discover all available pages before exploring further.
| Field | Type | Purpose |
|---|---|---|
memo | string (≤ 1000 chars) | Human-readable reason this tool was called. Shows up on the receipt — useful when you’re triaging spend or debugging an agent that went off the rails. |
decisionContext | object | Machine-readable companion. Open schema with known fields (goal, goalId, alternatives, confidence) plus any extras. Consumed by supervisor / auditor agents. |
memo. Both fields are stored on the receipt — see GET /v1/analytics/receipts.
TypeScript SDK
memo is plain text. decisionContext is any JSON-serialisable object — known fields are typed (see DecisionContext in the SDK types), extras are kept as-is.
Python SDK
decisionContext and decision_context — the SDK normalises to camelCase before sending.
Raw HTTP
If you’re not using an SDK, just includememo and decisionContext in the JSON body of any paid tool call:
Validation
The SDK does light client-side validation before sending:memoover 1000 chars → truncated with a warning logmemoempty / non-string → dropped silentlydecisionContext.confidenceoutside[0, 1]→ dropped silentlydecisionContextnon-object → dropped silently
Where it shows up
Both fields are written onto the receipt at creation time:GET /v1/analytics/receipts. The fields are returned alongside every other receipt attribute — no extra request needed.
When to use which
- Memo only — quick debugging. Set it on every paid call as a one-liner (“why am I calling this?”). The SDK nudges you with a warn log if you forget.
- Memo + decisionContext — agents under programmatic oversight (supervisor agents, audit pipelines, eval rigs). The structured context lets a downstream system reason about the decision without parsing prose.
- Neither — fine for fire-and-forget scripts where the receipts are noise. The SDK won’t block you; you just lose the audit trail.
Tag vs memo vs decisionContext
These three fields tell different stories about the same receipt:| Field | Set when | Answers |
|---|---|---|
memo | At call time | Why did I make this call? |
decisionContext | At call time | What was the structured reasoning? |
value_tag | After the outcome is known — via PATCH /v1/analytics/receipts/{receiptId}/value | Did this call generate value? |