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

# household.computed

`POST household.computed` (webhook)

A stored household was projected (POST /api/v1/households/{id}/project or the MCP project_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.computed', 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
    - `horizon` ProjectionHorizon, required
      - `startYear` integer, required: First projected calendar year, an integer in [1900, 2150] on every surface.
      - `years` integer, required: Number of years to project.
    - `endingNetWorth` number, required
    - `ranOutOfMoney` boolean, required
    - `ranOutInYear` integer, nullable, required

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