Per-template engagement rollup
One row per template aggregating activity across the entire query
window — no time bucketing. Use this to spot templates that bounce
more, complain more, or under-engage compared to peers. Rows are
sorted by sent descending, tie-broken by template ascending. Sends
that aren't tied to a named template (raw SendEmail calls without a
Template parameter) are excluded so they don't dominate the
ranking.
Rate formulas (note the asymmetric denominators, matching the dashboard):
bounce_rate = bounced / sentcomplaint_rate = complained / sentopen_rate = unique_opens / deliveredclick_rate = unique_clicks / delivered
All ratios are in [0, 1]. Zero denominators yield 0.0. The
template field is the SES template name (the slug — the value SES
received in the Template parameter), not a UI display name.
Default window is the trailing 30 days; plan retention applies. No pagination — the response holds every template the org used in the window.
Query parameters
from string<date-time> optional Window start (RFC 3339). Defaults to 30 days ago.
to string<date-time> optional Window end (RFC 3339). Defaults to now.
channel string<uuid> optional Filter by channel UUID. Malformed values return 422 validation_failed.
identity string optional Filter by sending identity. Accepts a full email address (the local-part is ignored — only the domain matches) or a bare domain.
template string optional Case-insensitive exact match on template name. Useful when you
only want one template's row. A non-matching value returns
200 with data: [], not 404.
Responses
code is internal_error. The
request_id field can be quoted to SendOps support to investigate.
application/problem+json