---
title: "calendar.deadline"
method: POST
path: "calendar.deadline"
---

# calendar.deadline

`POST calendar.deadline` (webhook)

Daily scan: deadlines and milestones newly due for one household — a dated deadline 60 and again 14 days ahead, an age milestone once in its year. Each notice is sent once; one event per household per day carries all of that day's notices.

## 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` 'calendar.deadline', 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
    - `label` string, nullable, required
    - `asOf` string, date, required
    - `notices` object[], required
      - `key` string, required: Stable identity of this occurrence: rule, member (or household) and date or year.
      - `ruleId` string, required
      - `label` string, required
      - `why` string, required
      - `strategies` string[], required
      - `source` object, required
        - `name` string, required
        - `url` string, required
      - `memberId` string, nullable, required
      - `precision` 'day' | 'window' | 'year', required: day: an exact due date; window: a period (date to endDate); year: a milestone placed in its calendar year (birth dates are not in the household record).
      - `date` string, date, required: The due date, the window's first day, or January 1 of the milestone's year.
      - `endDate` string, date
      - `year` integer
      - `note` string
      - `threshold` integer, required: 60 or 14 days; 0 for a year milestone.
      - `daysUntil` 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)
