> ## Documentation Index
> Fetch the complete documentation index at: https://docs.sequenzy.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Get Sending Status

> Check whether company-level sending is paused, why, and how to restore it

Check whether a workspace can send email right now. Returns the pause reason, the
sender-health rates measured against the thresholds that apply at your volume,
the automated review state, whether you can restore sending yourself, and ordered
remediation steps.

Call this whenever a send, sequence step, or test send fails for a reason that is
not a validation error. A company-level pause blocks every send, including test
sends. Requires the `account:read` scope, so a read-only key can diagnose a
blocked account.

<Warning>
  Sender-health enforcement uses all-time totals counted from a reset watermark,
  not a rolling window. `metricsWindow.expiresAt` is always `null` - a paused
  rate does not decay and waiting will not restore sending. See [Sender
  Health](/guides/sender-health).
</Warning>

## Request

```bash theme={null}
curl "https://api.sequenzy.com/api/v1/sending-status" \
  -H "Authorization: Bearer YOUR_API_KEY"
```

## Response fields

<ResponseField name="status" type="string">
  `active`, `paused`, or `suspended`. Anything other than `active` blocks every
  send for this workspace.
</ResponseField>

<ResponseField name="pauseReason" type="string">
  The enforcement message, including the measured rate, the threshold it
  crossed, and the send volume it was measured over. `null` when sending is
  active.
</ResponseField>

<ResponseField name="pauseReasonKind" type="string">
  One of `high_hard_bounce_rate`, `high_soft_bounce_rate`,
  `high_complaint_rate`, `phishing_guard`, `manual`, or `other`. Only
  `high_hard_bounce_rate` can be cleared with the resume endpoint.
</ResponseField>

<ResponseField name="pausedAt" type="string">
  ISO timestamp of the pause. `null` when sending is active.
</ResponseField>

<ResponseField name="selfResume.canSelfResume" type="boolean">
  Whether [resume](/api-reference/sending-status/resume) will succeed right now.
</ResponseField>

<ResponseField name="selfResume.unavailableReason" type="string">
  When `canSelfResume` is `false`, the gate that is blocking it:
  `waiting_for_review`, `blocked_by_ai`, `review_failed`, `blocked_by_admin`, or
  `unsupported_reason`. `null` when resume is available.
</ResponseField>

<ResponseField name="selfResume.aiReviewStatus" type="string">
  State of the automated sender-health review: `not_required`, `pending`,
  `approved`, `flagged`, or `failed`.
</ResponseField>

<ResponseField name="senderHealth" type="object">
  Enforcement counts and thresholds for `hardBounce`, `softBounce`, and
  `complaint`, plus their non-test send denominators: `bounceScopedSent` for
  bounce rates and `complaintScopedSent` for complaint rates. `scopedSent` is a
  backward-compatible alias for `bounceScopedSent`. Also includes
  `enforcementMode`. `null` when the workspace has no metrics record yet or
  sender-health analytics are temporarily unavailable; pause state and
  remediation remain authoritative during an analytics outage.
</ResponseField>

<ResponseField name="metricsWindow" type="object">
  `kind` is always `all_time_since_reset` and `expiresAt` is always `null`.
  `bounceResetAt` and `complaintResetAt` are the watermarks the totals are
  counted from.
</ResponseField>

<ResponseField name="remediation" type="object">
  `steps` for the current state, in order, plus `supportEmail`, `docsUrl`, and
  `dashboardUrl`.
</ResponseField>

## Responses

<ResponseExample>
  ```json 200 theme={null}
  {
    "success": true,
    "status": "paused",
    "pauseReason": "Bounce rate (9.910%) exceeded threshold (5%) for 111 total emails",
    "pauseReasonKind": "high_hard_bounce_rate",
    "pausedAt": "2026-08-05T09:12:00Z",
    "selfResume": {
      "canSelfResume": true,
      "supported": true,
      "allowedByAdmin": true,
      "ownerIsTrusted": false,
      "aiReviewStatus": "approved",
      "aiReviewReason": null,
      "aiReviewStartedAt": "2026-08-05T09:12:01Z",
      "aiReviewedAt": "2026-08-05T09:12:44Z",
      "unavailableReason": null
    },
    "senderHealth": {
      "enforcementMode": "enforce",
      "scopedSent": 111,
      "bounceScopedSent": 111,
      "complaintScopedSent": 111,
      "hardBounce": {
        "count": 11,
        "rate": 9.91,
        "warnThreshold": { "rate": 3, "count": null },
        "pauseThreshold": { "rate": 5, "count": null }
      },
      "softBounce": {
        "count": 2,
        "rate": 1.802,
        "warnThreshold": { "rate": 6, "count": null },
        "pauseThreshold": { "rate": 10, "count": null }
      },
      "complaint": {
        "count": 0,
        "rate": 0,
        "warnThreshold": { "rate": null, "count": 2 },
        "pauseThreshold": { "rate": null, "count": 3 }
      }
    },
    "metricsWindow": {
      "kind": "all_time_since_reset",
      "expiresAt": null,
      "bounceResetAt": null,
      "complaintResetAt": null,
      "description": "Sender-health enforcement uses all-time totals from the reset watermark, not a rolling window."
    },
    "remediation": {
      "steps": [
        "Fix the source of the bad addresses (import, form, or integration) so no new invalid addresses enter the list.",
        "Leave every permanent bounce suppressed. Removing suppressions re-sends to known-bad addresses and pauses the account again.",
        "Confirm the list has been cleaned, then request a resume."
      ],
      "supportEmail": "nic@sequenzy.com",
      "docsUrl": "https://docs.sequenzy.com/guides/sender-health",
      "dashboardPath": "/dashboard/company/comp_abc123",
      "dashboardUrl": "https://sequenzy.com/dashboard/company/comp_abc123"
    }
  }
  ```

  ```json 401 theme={null}
  {
    "success": false,
    "error": "Unauthorized"
  }
  ```

  ```json 403 theme={null}
  {
    "success": false,
    "error": "API key is missing required scope: account:read"
  }
  ```
</ResponseExample>
