Reporting
Read your sending performance: a dashboard summary, per-sender stats, the message log, deliverability metrics, and bounces & complaints. Paths are relative to https://app.blacklistguard.com/api/v1.
Dashboard summary
GET /dashboard
Returns a month-to-date stats object — delivered, bounced, failed, complained, suppressed, unsubscribed, unique_opens, unique_clicks, queued, plus the matching percentages (delivered_percent, bounced_percent, …) — along with your setup checklist.
Sending stats
GET /stats/chart?start_date=YYYY-MM-DD&end_date=YYYY-MM-DD GET /stats/health GET /stats/campaigns?page&limit GET /stats/autoresponders GET /stats/smtp GET /stats/api
chart returns a daily delivery series for the date range. The per-channel tables (campaigns, autoresponders, smtp, api) share one shape — rows include total_messages, delivered_count, failed_count, bounced_count, and (for campaigns/autoresponders) open_count, click_count, open_rate, click_rate — plus a pagination object.
Message log
GET /messages?source&email&status&page&limit
One row per sent message across every channel. Filter by source (campaign, autoresponder, api, smtp, platform), email, or status. Each row: { id, time, localpart, domain, status, attempts, error_message, source, origin_name }.
Deliverability
GET /deliverability GET /deliverability/recipient-domains?window_days=30&page&limit
deliverability returns { overall_metrics, ip_reputations, domain_reputations, bounce_breakdown, google_postmaster, sends_via_shared_pool, window_days, last_updated }. Pass window_days (default 30, max 90) to set the period: the rates, health score and reputation arrays follow it, while total_sent_24h, total_sent_7d and total_sent_30d always cover the span their name states, and IP and domain counts are all-time. recipient-domains breaks delivery down by the recipient's mailbox provider (Gmail, Outlook, …): { stats:[{ domain, total_messages, percent_total, success, bounced, failure, still_trying }], total_row, window_days, pagination }.
Bounces & complaints
GET /bounces?page=1&limit=50 GET /complaints?page=1&limit=50 GET /bounces-complaints/dashboard?window_days=30
bounces and complaints return newest-first records, all-time, paginated: { bounces, pagination:{ page, limit, total, total_pages } } (limit defaults to 50, max 200; complaints uses a complaints key). The dashboard aggregates them: { window_days, bounce_stats{ total_bounces, hard_bounces, soft_bounces, bounce_rate, last_24_hours, last_7_days, last_30_days }, complaint_stats{ total_complaints, complaint_rate, … }, bounce_trends, complaint_trends, top_bounce_domains, complaint_sources }.
Pass window_days (default 30, max 365) to the dashboard. The rates, both trend series and the top-lists follow it; last_24_hours, last_7_days and last_30_days always cover the span their name states; and the total_* counters are all-time. Trend series omit days with no activity rather than returning a zero, so fill gaps yourself when plotting. An out-of-range or unparseable window_days falls back to the default rather than erroring — read the window_days echoed in the response to confirm which period you got.