---
title: "Get account health"
method: GET
path: "/account-health"
tags: ["Account Health"]
---

# Get account health

`GET /account-health`

## Request

- Base URL: `https://api.sequenzy.com/api/v1`
- URL: `https://api.sequenzy.com/api/v1/account-health`
- Auth: HTTP bearer

Returns the account health report for the active company - the schedule, AI budget and spend, the latest check with its AI summary and stats, and open and snoozed insights, most severe first. Checks run for companies with more than 1,000 active subscribers that sent email in the last 14 days. Requires the analytics:read scope.

## Response `200`

Account health report returned

- object
  - `success` boolean
  - `accountHealth` AccountHealthOverview
    - `eligibility` object
      - `eligible` boolean: True when hasMinimumSubscribers and sentRecently are both true.
      - `hasMinimumSubscribers` boolean: Whether the workspace has more than minimumActiveSubscribers active subscribers.
      - `sentRecently` boolean: Whether the workspace sent at least one non-test email in the last activityDays days.
      - `minimumActiveSubscribers` integer
      - `activityDays` integer
    - `settings` AccountHealthSettings: Whether the weekly account health check runs and whether it drafts fixes. Checks run every Monday at 05:00 UTC; the schedule and AI budget are fixed. Checks never send email to subscribers or activate anything.
      - `enabled` boolean: Whether weekly checks run. Manual checks work either way.
      - `autonomy` 'draft_fixes' | 'report_only': draft_fixes lets the agent lay out up to 2 inactive draft sequences per check (named for the business, with trigger, timing and titled email steps; the check writes no email, they are written when the draft is opened in the dashboard or its fix is requested); report_only only reports.
    - `nextRunAt` string, date-time, nullable: Next scheduled check. Null when checks are off, the workspace is not eligible, or the scheduled slot has passed and the check has not started yet.
    - `latestRun` AccountHealthRun: One account health check.
      - `id` string
      - `trigger` 'scheduled' | 'manual'
      - `status` 'queued' | 'running' | 'completed' | 'failed' | 'skipped'
      - `scheduledFor` string, date-time
      - `startedAt` string, date-time, nullable
      - `completedAt` string, date-time, nullable
      - `skippedReason` 'below_subscriber_minimum' | 'no_recent_sends' | 'disabled' | 'null', nullable
      - `error` string, nullable
      - `summary` string, nullable: Short AI-written summary. Null when the AI step did not run (budget exhausted or the call failed).
      - `stats` object, nullable: This period against the one before (7 days for weekly checks, 30 for monthly).
        - `periodDays` integer
        - `periodStart` string, date-time
        - `periodEnd` string, date-time
        - `current` AccountHealthPeriodStats: Email stats for one period. Rates are percentages (0-100).
          - `sends` integer
          - `deliveries` integer
          - `opens` integer
          - `clicks` integer
          - `bounces` integer
          - `complaints` integer
          - `unsubscribes` integer
          - `openRate` number
          - `clickRate` number
          - `bounceRate` number
          - `complaintRate` number
          - `campaignsSent` integer
        - `previous` AccountHealthPeriodStats: Email stats for one period. Rates are percentages (0-100).
          - `sends` integer
          - `deliveries` integer
          - `opens` integer
          - `clicks` integer
          - `bounces` integer
          - `complaints` integer
          - `unsubscribes` integer
          - `openRate` number
          - `clickRate` number
          - `bounceRate` number
          - `complaintRate` number
          - `campaignsSent` integer
      - `insightCount` integer: Open insights after this check.
      - `newInsightCount` integer: Insights that were not open before this check.
      - `draftsCreated` integer: Inactive draft sequences this check created.
      - `emailedAt` string, date-time, nullable: When the report email send was claimed for this run. Set once, before the first recipient, so a retry never sends it twice.
      - `createdAt` string, date-time
    - `runInProgress` boolean: True while a check is queued or running. Poll until false.
    - `insights` AccountHealthInsight[]: Open and snoozed insights, most severe first.
      - `id` string
      - `detector` 'unhandled_event' | 'stalled_sequence' | 'campaign_gap' | 'stale_campaign_drafts' | 'underperforming_sequence_email' | 'deliverability_spike' | 'sending_domain_failing' | 'missing_sequence' | 'over_emailing' | 'neglected_subscribers' | 'unengaged_signups'
      - `severity` 'high' | 'medium' | 'low'
      - `status` 'open' | 'snoozed' | 'dismissed' | 'resolved'
      - `title` string
      - `detail` string
      - `recommendation` string
      - `evidence` object: Detector-specific numbers behind the finding. Event findings carry `monthlyRevenue` (USD a month the people behind the event pay) when a payment integration syncs revenue to contacts. A missing_sequence finding carries the suggested `playbook`, `name`, `goal`, `trigger` and `steps`. An over_emailing finding carries `overloadedSubscribers`, `recipients`, `peakPerDay`, `dailyThreshold`, `windowDays`, `frequencyCap` (null when off) and `sources` (type campaign, sequence or api, id, name, sends, and respectsFrequencyCap for sequences, plus enrollsEveryTime when the sequence uses unlimited re-entry and peakEnrollmentsPerPerson, the most times one person entered it in the window; the api source has an empty id and stands for marketing Send API email, which the frequency cap does not limit). A neglected_subscribers finding carries `neglectedSubscribers`, `eligibleSubscribers`, `days`, `estimated` and `sampled`. An unengaged_signups finding carries `provider` and `providerLabel` (a consumer mailbox provider such as gmail or yahoo; business domains are never reported), `listId` and `listName` (the list these contacts joined first, null for none), `subscribers`, `emailed` (how many got at least two emails), `sends`, `engaged` (how many of them opened or clicked), `baselineEmailed` and `baselineEngaged` (the same for the other new signups), `windowDays`, `sampled` and `capped` (`true` when more people joined than were checked).
      - `subjectType` 'event' | 'automation' | 'campaign' | 'sending_domain' | 'company'
      - `subjectId` string, nullable
      - `subjectName` string, nullable
      - `fixAutomationId` string, nullable: Inactive draft sequence the agent created to fix this, if any.
      - `actions` AccountHealthAction[]: What to do about the finding, primary first. Actions with a path open that dashboard screen; the others are performed by the api call listed, after the confirm prompt when one is given.
        - `kind` 'create_sequence' | 'open_sequence' | 'activate_sequence' | 'pause_sequence' | 'create_campaign' | 'review_campaign_drafts' | 'open_campaign' | 'verify_sending_domain' | 'open_domain_settings' | 'review_deliverability' | 'open_frequency_cap_settings' | 'apply_frequency_cap' | 'review_subscribers'
        - `label` string
        - `primary` boolean: The main fix. At most one action per insight is primary.
        - `path` string, nullable: Dashboard path under /dashboard/company/{companyId}, for actions that open a screen.
        - `targetId` string, nullable: The sequence, campaign or sending domain the action works on.
        - `confirm` object, nullable: Prompt to show before performing the action because it changes live sending.
          - `title` string
          - `description` string
          - `confirmLabel` string
          - `destructive` boolean
        - `api` object, nullable: Public API call that performs the action, relative to /api/v1.
          - `method` 'POST'
          - `path` string
        - `workspaceOnly` boolean: Only owners and admins can perform it.
      - `feedback` AccountHealthInsightFeedback: One person's answer to "was this useful?" for one finding.
        - `rating` 'useful' | 'not_useful'
        - `comment` string, nullable: What made it useful or not, or null.
        - `updatedAt` string, date-time
      - `snoozedUntil` string, date-time, nullable
      - `firstSeenAt` string, date-time
      - `lastSeenAt` string, date-time
      - `resolvedAt` string, date-time, nullable

## Other responses

- `401`: Unauthorized
- `403`: API key is missing the analytics:read scope
- `503`: The database was temporarily unavailable. The request may be retried after the delay in Retry-After.

## Changes

- **2026-10-27** `8156dc12d8b4`: 2 warning
  - added the new `review_subscribers` enum value to the `accountHealth/insights/items/actions/items/kind` response property for the response status `200`
  - added the new `unengaged_signups` enum value to the `accountHealth/insights/items/detector` response property for the response status `200`
- **2026-10-16** `db3873ca3d4d`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/sequenzy/apis/sequenzy-api/changes/account-health/get.md)

---

[API](https://skmtc.dev/sequenzy/apis/sequenzy-api.md) - [All operations](https://skmtc.dev/sequenzy/apis/sequenzy-api/llms.txt) - [OpenAPI document](https://skmtc.dev/sequenzy/apis/sequenzy-api/revisions/3d816357b738?raw)
