Sign inGet Started

Get sending health and deliverability limits

GET
/v1/email/health
const health = await bird.email.health({ from: "2026-05-01", to: "2026-05-31" });
console.log(health.status);
for (const signal of health.signals) {
  console.log(signal.metric, signal.value, signal.status);
}
Risposta200
{
  "period": {
    "data_as_of": null,
    "from": "2026-05-25",
    "to": "2026-06-01"
  },
  "status": "watching",
  "signals": [
    {
      "metric": "delivery_rate",
      "value": 0.995,
      "limit": null,
      "status": "healthy",
      "thresholds": {
        "direction": "below",
        "throttled": 0.984,
        "watching": 0.99
      }
    },
    {
      "metric": "open_rate",
      "value": 0.20100503,
      "limit": null,
      "status": "healthy"
    },
    {
      "metric": "bounce_rate",
      "value": 0.005,
      "limit": 0.005,
      "status": "watching",
      "thresholds": {
        "direction": "above",
        "throttled": 0.006,
        "watching": 0.004
      }
    },
    {
      "metric": "complaint_rate",
      "value": 0.00010050251,
      "limit": 0.003,
      "status": "healthy",
      "thresholds": {
        "direction": "above",
        "throttled": 0.001,
        "watching": 0.0006
      }
    }
  ]
}

Returns your workspace's sending-health verdict for the requested window, together with reference deliverability limits and the boundaries used to classify risk. Use it to render a health badge, label the bounce-rate and complaint-rate limits, and draw the risk lines on a deliverability chart without hard-coding thresholds that we may retune.

The overall status is healthy, watching, or throttled, taken as the worst of the delivery-rate, bounce-rate, and complaint-rate signals. It describes deliverability risk and never pauses your sending on its own. For the counts and rates the verdict is derived from, call Get aggregate email statistics over the same window.

Rates follow each event's occurrence time. A bounce or complaint that occurred during the window counts toward it even when the message was sent earlier. When you omit both dates the window ends today (UTC) and starts 7 days earlier. A window longer than 365 days returns 422.

Parametri di query

fromstring

Start date (inclusive) in YYYY-MM-DD, UTC. Defaults to 7 days before to when omitted.

tostring

End date (inclusive) in YYYY-MM-DD, UTC. Defaults to today (UTC) when omitted. Window may not exceed 365 days. Day boundaries are always UTC; unlike the statistics reads, this one takes no timezone.

Payload di risposta

period
object
obbligatorio

The date range the verdict was computed over, echoed back from the request.

Mostra attributi secondari
status
string
obbligatorio

Overall sending-health verdict for the window, taken as the worst status among the bounce-rate, complaint-rate, and delivery-rate signals. The open-rate signal, which can be strong, is not part of this roll-up. The overall verdict is one of healthy, watching, or throttled. It is healthy when the other three signals are each healthy or better. It is watching when at least one is watching, and throttled when at least one is throttled. This verdict describes deliverability risk. It never pauses your sending on its own.

Possible values: healthy, watching, throttled

signals
array of object
obbligatorio

The per-rate signals include delivery_rate, open_rate, bounce_rate, and complaint_rate. Read a signal by matching on its metric. Each entry carries its current value, a reference deliverability limit (null where no limit applies), and its own verdict. Delivery rate, bounce rate, and complaint rate also carry the thresholds their verdict was classified against; open rate does not, because a high open rate is never a risk.

Mostra attributi secondari
signals.metric
string
obbligatorio

Which rate this signal reports.

Possible values: delivery_rate, open_rate, bounce_rate, complaint_rate

signals.value
nullable number
obbligatorio

The current rate over the window, as a fraction. Null when its denominator is zero.

signals.limit
nullable number
obbligatorio

The reference deliverability limit for this rate, as a fraction (for example 0.005 for a 0.5% bounce-rate limit). Null for metrics that have no limit, such as delivery rate and open rate. The verdict is classified using thresholds, which can differ from this reference limit.

signals.status
string
obbligatorio

This metric's individual verdict, ordered best to worst: strong, healthy, watching, throttled. strong applies only to open_rate, for an open rate well above typical. For the other rates, healthy, watching, and throttled indicate how close the rate is to a level that risks deliverability. The verdict follows the thresholds boundaries rather than the displayed reference limit. A signal whose value is null, because its denominator was zero in the window, is reported as healthy.

Possible values: strong, healthy, watching, throttled

signals.thresholds
object
Mostra attributi secondari

Continua con la documentazione, le guide e gli esempi per questo argomento.