Sequenzy Account Health API

The Account Health API from Sequenzy — 6 operation(s) for account health.

Operations 6

GET /account-health Get account health #
PATCH /account-health/settings Update account health settings #
POST /account-health/runs Run account health check #
PATCH /account-health/insights/{insightId} Update account health insight #
POST /account-health/insights/{insightId}/feedback Send account health feedback #
POST /account-health/insights/{insightId}/fix Build account health fix #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/sequenzy:sequenzy-account-health-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

sequenzy-account-health-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Sequenzy Account Health API
  description: Sequenzy API for managing subscribers, tags, events, sequences, and transactional emails
  version: 1.0.0
servers:
- url: https://api.sequenzy.com/api/v1
  description: Production server
- url: https://api.sequenzy.com/v1
  description: Legacy production server alias
security:
- bearerAuth: []
tags:
- name: Account Health
paths:
  /account-health:
    get:
      operationId: getAccountHealth
      summary: Get account health
      description: 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.
      tags:
      - Account Health
      responses:
        '200':
          description: Account health report returned
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                  accountHealth:
                    $ref: '#/components/schemas/AccountHealthOverview'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: API key is missing the analytics:read scope
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '503':
          $ref: '#/components/responses/TransientDatabaseUnavailable'
  /account-health/settings:
    patch:
      operationId: updateAccountHealthSettings
      summary: Update account health settings
      description: Turns the weekly account health check (Mondays, 05:00 UTC) on or off and chooses whether it drafts fixes. Pass only the fields to change; unknown fields are rejected. Who gets the findings is each person's account_health notification preference. Requires the companies:manage scope plus owner or admin access.
      tags:
      - Account Health
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AccountHealthSettings'
      responses:
        '200':
          description: Settings saved
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                  settings:
                    $ref: '#/components/schemas/AccountHealthSettings'
                  nextRunAt:
                    type:
                    - string
                    - 'null'
                    format: date-time
        '400':
          description: A field is unknown or has the wrong type
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: API key is missing the companies:manage scope, or the user is not an owner or admin
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Company not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /account-health/runs:
    post:
      operationId: runAccountHealthCheck
      summary: Run account health check
      description: 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.
      tags:
      - Account Health
      responses:
        '202':
          description: Check queued, or the in-flight check returned
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                  run:
                    $ref: '#/components/schemas/AccountHealthRun'
                  alreadyInProgress:
                    type: boolean
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: API key is missing the sequences:write scope, or the user has view-only access
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '409':
          description: NOT_ELIGIBLE - the company has 1,000 or fewer active subscribers, or sent no email in the last 14 days
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: 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.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /account-health/insights/{insightId}:
    patch:
      operationId: updateAccountHealthInsight
      summary: Update account health insight
      description: Dismisses, snoozes, resolves or reopens one insight. A resolved insight reopens if the next check still finds it; a dismissed one stays hidden. Requires the sequences:write scope.
      tags:
      - Account Health
      parameters:
      - name: insightId
        in: path
        required: true
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - action
              properties:
                action:
                  type: string
                  enum:
                  - dismiss
                  - snooze
                  - resolve
                  - reopen
                snoozeDays:
                  type: integer
                  minimum: 1
                  maximum: 90
                  description: Days to snooze, only with action snooze. Defaults to 7.
      responses:
        '200':
          description: Insight updated
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                  insight:
                    $ref: '#/components/schemas/AccountHealthInsight'
        '400':
          description: action is missing or unknown, or snoozeDays is out of range
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: API key is missing the sequences:write scope, or the user has view-only access
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Insight not found in this company
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /account-health/insights/{insightId}/feedback:
    post:
      operationId: submitAccountHealthFeedback
      summary: Send account health feedback
      description: Records whether a finding was useful to the API key owner, with an optional comment, and passes it to the Sequenzy team to improve the suggestions. It changes nothing in the workspace. Each person has one answer per finding, for findings of any status; sending again replaces the rating and keeps the earlier comment unless comment is given (null or an empty string clears it). Requires the analytics:read scope, so viewers can answer too.
      tags:
      - Account Health
      parameters:
      - name: insightId
        in: path
        required: true
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: false
              required:
              - rating
              properties:
                rating:
                  type: string
                  enum:
                  - useful
                  - not_useful
                comment:
                  type:
                  - string
                  - 'null'
                  maxLength: 2000
                  description: What made it useful or not. Leading and trailing spaces are trimmed. Omit to keep an earlier comment; null or an empty string clears it.
      responses:
        '200':
          description: Feedback saved
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                  insightId:
                    type: string
                  feedback:
                    $ref: '#/components/schemas/AccountHealthInsightFeedback'
        '400':
          description: rating is missing or unknown, comment is not a string or null or is longer than 2,000 characters, or the body has an unknown field
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: API key is missing the analytics:read scope
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Insight not found in this company
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /account-health/insights/{insightId}/fix:
    post:
      operationId: createAccountHealthFix
      summary: Build account health fix
      description: Builds the draft sequence an "event without a sequence" (unhandled_event) or "missing sequence" (missing_sequence) finding asks for, with its trigger, timing and titled email steps, then writes the emails with AI like a sequence from a template. An unhandled_event draft is triggered by its event; a missing_sequence draft uses the trigger and steps in the finding's evidence (new contacts, an event, or manual enrollment). It stays inactive until you enable it. Calling it again returns the existing draft with created false; email steps that still have no email (for example a draft the weekly check laid out that nobody opened yet) are written then, and existing emails are never rewritten. Requires the sequences:write scope.
      tags:
      - Account Health
      parameters:
      - name: insightId
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: A draft already existed and is returned
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AccountHealthFixResult'
        '201':
          description: Draft sequence built
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AccountHealthFixResult'
        '400':
          description: The insight is neither an event without a sequence nor a missing sequence
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: API key is missing the sequences:write scope, or the user has view-only access
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Insight not found in this company
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '409':
          description: IN_PROGRESS - another request is building this fix right now
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
components:
  headers:
    RetryAfter:
      description: Number of seconds to wait before retrying the request.
      schema:
        type: integer
        minimum: 1
        example: 1
  responses:
    TransientDatabaseUnavailable:
      description: The database was temporarily unavailable. The request may be retried after the delay in Retry-After.
      headers:
        Retry-After:
          $ref: '#/components/headers/RetryAfter'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            success: false
            error: The service could not reach its database for a moment. Retry the request.
            code: SERVICE_UNAVAILABLE
  schemas:
    AccountHealthPeriodStats:
      type: object
      description: Email stats for one period. Rates are percentages (0-100).
      properties:
        sends:
          type: integer
        deliveries:
          type: integer
        opens:
          type: integer
        clicks:
          type: integer
        bounces:
          type: integer
        complaints:
          type: integer
        unsubscribes:
          type: integer
        openRate:
          type: number
        clickRate:
          type: number
        bounceRate:
          type: number
        complaintRate:
          type: number
        campaignsSent:
          type: integer
    AccountHealthFixResult:
      type: object
      properties:
        success:
          type: boolean
        sequenceId:
          type: string
        created:
          type: boolean
          description: False when an existing draft was returned.
        enrichmentStatus:
          type: string
          enum:
          - processing
          - not_queued
          description: 'When created is true, or when an existing draft still had email steps without an email (absent once every email exists). `processing` while AI writes the emails; poll Get Sequence for progress. `not_queued` means the draft exists but writing could not start: open it in the dashboard to write the emails, and do not build it again.'
    AccountHealthRun:
      type: object
      description: One account health check.
      properties:
        id:
          type: string
        trigger:
          type: string
          enum:
          - scheduled
          - manual
        status:
          type: string
          enum:
          - queued
          - running
          - completed
          - failed
          - skipped
        scheduledFor:
          type: string
          format: date-time
        startedAt:
          type:
          - string
          - 'null'
          format: date-time
        completedAt:
          type:
          - string
          - 'null'
          format: date-time
        skippedReason:
          type:
          - string
          - 'null'
          enum:
          - below_subscriber_minimum
          - no_recent_sends
          - disabled
          - null
        error:
          type:
          - string
          - 'null'
        summary:
          type:
          - string
          - 'null'
          description: Short AI-written summary. Null when the AI step did not run (budget exhausted or the call failed).
        stats:
          description: This period against the one before (7 days for weekly checks, 30 for monthly).
          oneOf:
          - type: object
            properties:
              periodDays:
                type: integer
              periodStart:
                type: string
                format: date-time
              periodEnd:
                type: string
                format: date-time
              current:
                $ref: '#/components/schemas/AccountHealthPeriodStats'
              previous:
                $ref: '#/components/schemas/AccountHealthPeriodStats'
          - type: 'null'
        insightCount:
          type: integer
          description: Open insights after this check.
        newInsightCount:
          type: integer
          description: Insights that were not open before this check.
        draftsCreated:
          type: integer
          description: Inactive draft sequences this check created.
        emailedAt:
          type:
          - string
          - 'null'
          format: date-time
          description: When the report email send was claimed for this run. Set once, before the first recipient, so a retry never sends it twice.
        createdAt:
          type: string
          format: date-time
    Error:
      type: object
      properties:
        success:
          type: boolean
          example: false
        error:
          type: string
          example: Error message
        code:
          type: string
          description: Optional stable machine-readable error discriminator when available.
          example: COMPANY_CREATE_REQUIRES_PERSONAL_KEY
        retryable:
          type: boolean
          description: Whether retrying the request can recover from the error.
        issues:
          type: array
          description: Field-level problems with the request, when the endpoint reports them. Up to ten entries; `error` summarizes the first three.
          items:
            $ref: '#/components/schemas/InputIssue'
      required:
      - error
    AccountHealthInsightFeedback:
      type: object
      description: One person's answer to "was this useful?" for one finding.
      properties:
        rating:
          type: string
          enum:
          - useful
          - not_useful
        comment:
          type:
          - string
          - 'null'
          description: What made it useful or not, or null.
        updatedAt:
          type: string
          format: date-time
    AccountHealthInsight:
      type: object
      description: One finding of the account health check. The same problem keeps one insight across checks.
      properties:
        id:
          type: string
        detector:
          type: string
          enum:
          - 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:
          type: string
          enum:
          - high
          - medium
          - low
        status:
          type: string
          enum:
          - open
          - snoozed
          - dismissed
          - resolved
        title:
          type: string
          example: Nothing happens after "trial_ended"
        detail:
          type: string
        recommendation:
          type: string
        evidence:
          type: object
          additionalProperties: true
          description: 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:
          type: string
          enum:
          - event
          - automation
          - campaign
          - sending_domain
          - company
        subjectId:
          type:
          - string
          - 'null'
        subjectName:
          type:
          - string
          - 'null'
        fixAutomationId:
          type:
          - string
          - 'null'
          description: Inactive draft sequence the agent created to fix this, if any.
        actions:
          type: array
          description: 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.
          items:
            $ref: '#/components/schemas/AccountHealthAction'
        feedback:
          description: Included in Get Account Health only. Your own answer to "was this useful?" for this finding (the API key owner's), or null when you have not answered. Other responses that return an insight leave it out.
          oneOf:
          - $ref: '#/components/schemas/AccountHealthInsightFeedback'
          - type: 'null'
        snoozedUntil:
          type:
          - string
          - 'null'
          format: date-time
        firstSeenAt:
          type: string
          format: date-time
        lastSeenAt:
          type: string
          format: date-time
        resolvedAt:
          type:
          - string
          - 'null'
          format: date-time
    AccountHealthAction:
      type: object
      properties:
        kind:
          type: string
          enum:
          - 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:
          type: string
          example: Build this sequence
        primary:
          type: boolean
          description: The main fix. At most one action per insight is primary.
        path:
          type:
          - string
          - 'null'
          description: Dashboard path under /dashboard/company/{companyId}, for actions that open a screen.
          example: /campaign?action=new
        targetId:
          type:
          - string
          - 'null'
          description: The sequence, campaign or sending domain the action works on.
        confirm:
          description: Prompt to show before performing the action because it changes live sending.
          oneOf:
          - type: object
            properties:
              title:
                type: string
              description:
                type: string
              confirmLabel:
                type: string
              destructive:
                type: boolean
          - type: 'null'
        api:
          description: Public API call that performs the action, relative to /api/v1.
          oneOf:
          - type: object
            properties:
              method:
                type: string
                enum:
                - POST
              path:
                type: string
                example: /sequences/seq_123/disable
          - type: 'null'
        workspaceOnly:
          type: boolean
          description: Only owners and admins can perform it.
    AccountHealthOverview:
      type: object
      properties:
        eligibility:
          type: object
          properties:
            eligible:
              type: boolean
              description: True when hasMinimumSubscribers and sentRecently are both true.
            hasMinimumSubscribers:
              type: boolean
              description: Whether the workspace has more than minimumActiveSubscribers active subscribers.
            sentRecently:
              type: boolean
              description: Whether the workspace sent at least one non-test email in the last activityDays days.
            minimumActiveSubscribers:
              type: integer
              example: 1000
            activityDays:
              type: integer
              example: 14
        settings:
          $ref: '#/components/schemas/AccountHealthSettings'
        nextRunAt:
          type:
          - string
          - 'null'
          format: date-time
          description: 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:
          oneOf:
          - $ref: '#/components/schemas/AccountHealthRun'
          - type: 'null'
        runInProgress:
          type: boolean
          description: True while a check is queued or running. Poll until false.
        insights:
          type: array
          description: Open and snoozed insights, most severe first.
          items:
            $ref: '#/components/schemas/AccountHealthInsight'
    InputIssue:
      type: object
      properties:
        path:
          type: string
          description: Dotted field path, such as `audience.subscriberIds[0]`. Empty when the problem is with the request body itself.
          example: kind
        message:
          type: string
          description: What is wrong with the field.
          example: must be "add_tags"
        allowedValues:
          type: array
          description: Accepted values when the field only takes a fixed set of values.
          items: {}
          example:
          - add_tags
      required:
      - path
      - message
    AccountHealthSettings:
      type: object
      description: 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.
      properties:
        enabled:
          type: boolean
          description: Whether weekly checks run. Manual checks work either way.
          example: true
        autonomy:
          type: string
          enum:
          - draft_fixes
          - report_only
          description: 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.
          example: draft_fixes
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: API key passed as Bearer token