---
title: "Every lifecycle email, its trigger, and its variables"
method: GET
path: "/stats/admin-emails/catalog"
tags: ["Admin Emails"]
---

# Every lifecycle email, its trigger, and its variables

`GET /stats/admin-emails/catalog`

## Request

- Base URL: `https://api.nippy.host`
- URL: `https://api.nippy.host/stats/admin-emails/catalog`
- Auth: `bearer` (a scheme the document does not define)

Describes the onboarding sequence: which step occupies which slot, which accounts route to it, the send window or product event that fires it, the message stream, and the context fields its copy reads. Includes the retired keys, which no longer send but are still referenced by stored send-log rows.

## Response `200`

- APILifecycleCatalog
  - `entries` APILifecycleCatalogEntry[], required
    - `template` 'welcome' | 'agent_welcome' | 'unblock' | 'make_it_yours' | 'update_lesson' | 'trial_tips' | 'trial_ending' | 'activation_ask' | 'feedback_ask' | 'week_one_upsell' | 'paid_activation' | 'first_visitors' | 'preview_expiring' | 'payment_failed' | 'plan_ended_unpaid', required
    - `name` string, required
    - `purpose` string, required: One line: the job this email does.
    - `slot` 'day0' | 'day2' | 'day6' | 'event' | 'retired', required: Where the step sits in the sequence. `event` steps anchor to a product event rather than account age; `retired` steps are no longer sent.
    - `condition` string, required: Which accounts land here rather than in a sibling branch of the same slot.
    - `trigger` string, required: What actually causes the send.
    - `windowHours` APILifecycleWindow
      - `start` number, required: Account age in hours at which the step opens.
      - `end` number, required: Account age in hours at which it lapses (half-open).
    - `stream` 'broadcast' | 'transactional', required: Postmark message stream. Transactional notices reach opted-out users and carry no unsubscribe footer.
    - `respectsOptOut` boolean, required
    - `variables` string[], required: Context fields this template's copy branches on or prints, most significant first.
    - `sampleContext` object, required: Preview defaults for this template, already layered over the shared sample context — the panel's starting point.
    - `retired` boolean, required: True for keys that are no longer sent.
  - `fields` APILifecycleContextField[], required
    - `key` string, required
    - `label` string, required
    - `type` 'string' | 'boolean' | 'number', required
    - `nullable` boolean, required: Whether an empty control means null rather than empty string.
    - `description` string, required
    - `environment` boolean, required: True for values that come from the environment rather than the account — the link origins. Read by templates, but never the reason to open this panel.
  - `defaultContext` object, required: Sample context shared by every template, before per-template defaults.

## Other responses

- `403`: Admin access required

---

[API](https://skmtc.dev/nippy/apis/nippy-backend-api.md) · [All operations](https://skmtc.dev/nippy/apis/nippy-backend-api/llms.txt) · [OpenAPI document](https://skmtc.dev/nippy/apis/nippy-backend-api/revisions/7ab23f040a55?raw)
