---
title: "One stored decision, in full"
method: GET
path: "/api/v1/decisions/{id}"
tags: ["decisions"]
---

# One stored decision, in full

`GET /api/v1/decisions/{id}`

## Request

- Base URL: `https://worthune.com`
- URL: `https://worthune.com/api/v1/decisions/{id}`
- Auth: one of:
  - HTTP bearer
  - API key in header `X-Api-Key`

The decision object as produced, the household version, and the evidence record with its hashed inputs (hash-only for rows stored before migration 0027).

## Response `200`

The decision.

- object
  - `ok` unknown, required
  - `decision` object, required
    - `id` integer, required
    - `householdId` integer, required
    - `householdVersion` integer, required
    - `strategy` string, required
    - `strategySpecVersion` string, required
    - `recordSha256` string, required
    - `createdAt` string, date-time, required
    - `decision` DecisionObject, required: Decision object v0.1.0 (docs/decision-object-spec.md).
      - `schemaVersion` '0.1.0', required
      - `strategy` string, required
      - `strategySpecVersion` string, required
      - `objective` string, required: What the scores maximize, in one sentence.
      - `baseline` object, required
        - `description` string, required
        - `recordSha256` string
      - `alternatives` DecisionAlternative[], required
        - `id` string, required
        - `label` string, required
        - `score` number, required: Objective score; alternatives are sorted by it, best first (validated).
        - `delta` OutcomeDelta, required
          - `endingNetWorthDelta` number, required: Variant − baseline, final-year net worth.
          - `totalTaxDelta` number, required: Variant − baseline, cumulative federal + state tax across the horizon.
          - `ranOutInYear` object, required
            - `baseline` integer, nullable, required
            - `variant` integer, nullable, required
        - `intents` ExecutionIntent[], required: Empty = status quo.
          - `id` string, required
          - `kind` 'transfer' | 'convert' | 'withdraw' | 'contribute' | 'claim' | 'set-policy', required
          - `summary` string, required: One human sentence; policy-level, never a trade.
          - `accountId` string: Household-schema account id, when the intent targets one.
          - `year` integer
          - `amountUsd` number
        - `notes` string[]
      - `assumptions` object, required
        - `source` string, required
        - `profile` ProfileRef: An assumption profile from GET /api/v1/assumption-profiles, or the built-in illustrative-6-3-3@1.0.0.
          - `id` string, required
          - `version` string, required: Exact version; a pinned run never silently gets a newer one.
      - `evidence` EvidenceLink[], required
        - `kind` 'projection' | 'model-run' | 'decision', required
        - `sha256` string, required
        - `specVersion` string, required
    - `record` union, required
      - object: Evidence record v2. Verify with POST /api/v1/records/verify or the SDKs' verifyRecord.
        - `sha256` string, required: SHA-256 (hex) over the canonical JSON of {model, specVersion, inputs, outputs} — keys sorted recursively, no whitespace.
        - `fields` unknown, required
        - `howToVerify` string, required
        - `model` string, required: The hashed model identity — a catalog model name, "household-projection", or "decision-<strategy>".
        - `specVersion` string, required
        - `inputs` object, required: The exact hashed inputs, present on records whose envelope does not otherwise expose them (household projections, decisions). Point-model run responses echo `inputs` at top level instead; a verify response's record covers the inputs the caller sent in the request.
        - `signature` RecordSignature: Proves Worthune minted the record's hash. Absent when the deployment has no signing key; a stored decision is signed only when its hash is recomputed from the stored inputs.
          - `alg` 'Ed25519', required
          - `keyId` string, required: Matches a key at GET /api/v1/records/keys.
          - `value` string, required: base64url signature.
          - `message` string, required: What was signed: "worthune-record:v1:" + sha256. Rebuild it from the hash when verifying.
      - object: Hash-only record: decisions stored before migration 0027 did not retain their hashed inputs.
        - `sha256` string, required
        - `fields` unknown, required
        - `howToVerify` string, required
        - `model` string, required
        - `specVersion` string, required
        - `inputs` unknown, required
        - `note` string, required

## Other responses

- `401`: No key presented (Authorization: Bearer wk_… or X-Api-Key).
- `402`: Unrecognized or revoked API key.
- `403`: The key predates organization support (contact support for a free rotation).
- `404`: No decision with this id in the key's organization.
- `429`: Hourly per-org stateful quota, a per-route durable limit, or the 120 requests/minute per-IP burst backstop.
- `503`: Billing is not configured on this deployment; household resources are disabled rather than served without tenancy (production fail-closed).

---

[API](https://skmtc.dev/worthune/apis/worthune-api.md) · [All operations](https://skmtc.dev/worthune/apis/worthune-api/llms.txt) · [OpenAPI document](https://skmtc.dev/worthune/apis/worthune-api/revisions/9f2241072555?raw)
