List deliverabilitys

GET/api/v1/deliverability
Requires anorganization API keywith the scopereports:read

Request

GET/api/v1/deliverability
curl -X GET 'https://app.mailyte.com/api/v1/deliverability' \
  -H 'Authorization: Bearer mk_live_YOUR_API_KEY'
The key names its own organization, so no X-Organization-ID header is needed.

Response

Success.

  • dataobject
    • objectstringdeliverability_report
    • scoreinteger

      0-100.

    • bandstringneeds_attention | good | excellent

      `score` bucketed. A VALUE, not a display label: this used to be `"Needs attention"`, Title Case with a space, which no caller could switch on without matching English.

    • window_daysinteger

      Everything in this report is computed over this many days, ending now.

    • volumeobject

      Counts -- things that happened. Split from `rates` because the two used to sit flat in one `metrics` bag, told apart only by an `_rate` suffix, so `bounced: 1` read as a contradiction beside `bounce_rate: 50`.

      • submittedinteger

        DISTINCT message ids across outbound mail events, not `email.submitted` events -- nothing emits those on the ingest path, so counting them showed 0 forever beside non-zero rates.

      • deliveredinteger
      • bouncedinteger
      • openedinteger
      • clickedinteger
      • complaintsinteger

        `delivery.complaint` events.

      • unsubscribedinteger
    • ratesobject

      PERCENTAGES, 0-100, not fractions: a bounce rate of 50 is half. The `_rate` suffix is redundant under this key and is gone. They divide by `max(volume.delivered, volume.submitted, 1)`, so a rate can exceed what a naive reading of `volume` suggests when tracking events outnumber known messages.

      • opennumber
      • clicknumber
      • bouncenumber
      • negative_engagementnumber

        Complaints and unsubscribes together.

    • authenticationobject

      Per-domain SPF/DKIM/DMARC. HIDDEN DOMAINS ARE EXCLUDED here, as on the Domains page -- but they still send, so `volume` above DOES count their mail. The two sets differ deliberately, which is why this block names the domains it scored instead of only publishing an average.

      • average_scorenumber

        0-100.

      • domainsarray<object>
        • domainstring

          The domain name these three flags are about. NULL WOULD MEAN UNKNOWN and cannot happen: each row is one of your domain records and the column is NOT NULL. An unauthenticated domain still appears here NAMED, with `spf`/`dkim`/`dmarc` false and `score` 0 -- a domain is never anonymised into a null row, because the whole reason this list is published beside `average_score` is to say which domains dragged it down.

        • scoreinteger

          0-100.

        • spfboolean
        • dkimboolean
        • dmarcboolean
    • recommendationsarray<object>

      What to fix, worst first. Empty when there is nothing to say.

      • severitystringcritical | warning | info
      • messagestring

        Human-readable prose. Not a stable identifier -- do not match on it; the wording carries live figures and domain names and is rewritten whenever the advice changes. NULL WOULD MEAN UNKNOWN and cannot happen: every recommendation this report can emit is built with its sentence, so a row without one is not a recommendation with nothing to say. If you need to branch, branch on `severity`, which IS a closed set.

Returned inside the standard envelope.

Errors

StatusWhen
401The API key is missing, unknown, revoked or expired. All four answer identically, on purpose: distinguishing them would confirm which keys exist.
403The key is valid but may not do this: it lacks the required scope, its IP allowlist does not include you, or this endpoint does not accept API keys.
404No such resource in this organization.
422The request was understood but the values were not acceptable.
429Too many requests, or the organization has spent its sending allowance. `Retry-After` says how long to wait.

Every status, with what causes it and what to do, is on the error reference.