API reference

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.