---
title: "household.decision"
method: POST
path: "household.decision"
---

# household.decision

`POST household.decision` (webhook)

A strategy run was stored (POST /api/v1/households/{id}/decisions or the MCP decide_household tool).

## Headers

- `x-worthune-event` 'household.computed' | 'household.updated' | 'household.archived' | 'household.decision' | 'household.drift' | 'book.scan.completed' | 'book.scan.failed' | 'facts.changed' | 'assumption-profile.published' | 'calendar.deadline' | 'mandate.proposal' | 'mandate.question' | 'proposal.approved' | 'proposal.rejected' | 'proposal.expired' | 'proposal.superseded' | 'ledger.entry' | 'mandate.paused' | 'mandate.ended', required
- `x-worthune-delivery` string, required
- `x-worthune-timestamp` string, required
- `x-worthune-signature` string, required
- `x-worthune-signature-previous` string

## Payload

- object: Signed POST body. x-worthune-signature = 'sha256=' + hex(HMAC-SHA256(secret, `${x-worthune-timestamp}.${rawBody}`)). After a secret rotation, x-worthune-signature-previous (signed with the old secret) rides along for 24 hours. Delivery is at least once: a failed attempt is retried up to five more times with backoff (about 1 min, 5 min, 30 min, 2 h, 6 h), every attempt carrying the same x-worthune-delivery id; a redirect is not a receipt.
  - `kind` 'household.decision', required
  - `timestamp` integer, required: Unix seconds; equals the x-worthune-timestamp header.
  - `data` object, required: Event-specific payload — see the per-event schemas under `webhooks`.
    - `householdId` integer, required
    - `householdVersion` integer, required
    - `decisionId` integer, required
    - `strategy` 'withdrawal-sequencing' | 'roth-ladder' | 'ss-claiming' | 'asset-location' | 'tax-loss-harvesting' | 'annual-gifting' | 'pension-election' | 'bracket-fill' | 'charitable-giving', required
    - `recordSha256` string, required
    - `topAlternativeId` string: The best-ranked alternative's id.

## Acknowledgement `2XX`

Receipt. Any non-2xx (or a redirect, or a 5-second timeout) is a failed attempt, retried up to five more times with backoff. An event's first failed attempt counts toward auto-disable — 10 consecutive failed events disable the endpoint; any successful delivery resets the count.

---

[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)
