---
title: "Run account health check"
method: POST
path: "/account-health/runs"
tags: ["Account Health"]
---

# Run account health check

`POST /account-health/runs`

## Request

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

Queues an account health check now. A check that is already queued or running is returned instead, with alreadyInProgress true. Manual checks never send the report email, are limited to one every 10 minutes, and wait a day after a check that left findings open. Poll Get account health until runInProgress is false. Requires the sequences:write scope.

## Response `202`

Check queued, or the in-flight check returned

- object
  - `success` boolean
  - `run` 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
  - `alreadyInProgress` boolean

## Other responses

- `401`: Unauthorized
- `403`: API key is missing the sequences:write scope, or the user has view-only access
- `409`: NOT_ELIGIBLE - the company has 1,000 or fewer active subscribers, or sent no email in the last 14 days
- `429`: RATE_LIMITED - a manual check ran in the last 10 minutes, or the latest check (under a day old) left findings open. retryAfterSeconds says when to try again.

## Changes

- **2026-10-16** `db3873ca3d4d`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/sequenzy/apis/sequenzy-api/changes/account-health/runs/post.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)
