email-inbox-insights

Get spam-trap hits for a sending domain

Returns the spam-trap hits recorded against a sending domain over the period: the total, a split by the kind of trap, a split by the trap network that observed them, and the individual hits with the sending IP and trap age behind each.

Spam traps are addresses that exist only to catch senders mailing lists they should not be mailing, so the kind of trap says more than the count. Hits on pristine traps, which never belonged to a real person, point at harvested or guessed addresses; hits on recycled traps point at stale list data. Zero hits is a measured zero and a good result, so the totals are real figures rather than an empty state.

get/v1/email/inbox-insights/spam-traps

Request

  • Base URL: https://us1.platform.bird.com
  • URL: https://us1.platform.bird.com/v1/email/inbox-insights/spam-traps
  • Auth: one of:
    • HTTP bearer
    • API key in cookie bird_session

Query parameters

sending_domainstring required
Example:mail.acme.com

The sending domain to report on: one of the workspace's verified sending domains, exactly as it appears there. A domain that is not verified in this workspace answers not-found.

fromstring date
Example:2026-07-19

First UTC day of the period, inclusive, in YYYY-MM-DD: the same window convention as the email statistics endpoints. Defaults to 30 days before to.

It may be at most 30 days before to, which is also the default, so a request naming neither date is already at the limit. Asking for more answers 422: the page pairs these figures with Bird's own per-provider sending statistics, and those are kept for 30 days, so a longer period could only describe two different spans side by side.

tostring date
Example:2026-08-17

Last UTC day of the period, inclusive, in YYYY-MM-DD. Defaults to today.

compare'previous_period'

Set to previous_period to include the immediately preceding window of equal length in the same response, so deltas need no second request.

Example:previous_period

Include the prior equal-length period, populating compared_to and delta.

Headers

X-Workspace-Idstring

Workspace context for the request. Required for dashboard authentication and master keys. Workspace keys and access tokens already identify their workspace; send that workspace or omit the header. A different one is rejected.

X-Organization-Idstring

Organization context for the request. Required for dashboard authentication. An API key or access token carries its own organization, so send either that organization or no header at all; a different one is rejected.

Response

Spam-trap hits for the requested domain and period.

resourcestring required

Which resource this response is, echoed for self-description.

domainstring required

The sending domain the figures describe.

generated_atstring date-time required

When these figures were computed. The measurement service's own stamp where it publishes one; on the resources Bird derives from daily rates it has none to publish, and this is when Bird computed them.

cached_atstring date-time

Present when the response was served from a short-lived copy rather than fetched for this request: when that copy was fetched.

totalinteger required

Trap hits observed over the period, across every trap network. The authoritative count: hit_rows holds a sample of the rows behind it.

deltainteger

How the hit count moved against the prior period, as a change in the number of hits rather than in percentage points. Negative is an improvement. Present only when the request asked for a comparison and the prior period had data; absence is not zero change.

Example response

{
  "resource": "placement",
  "domain": "mail.acme.com",
  "measurement": {
    "sources": [
      "panel",
      "intelliseed_public"
    ],
    "weighting": {
      "weight_set_id": "12",
      "source": "account",
      "basis": "weighted-mean-of-per-isp-rates"
    }
  },
  "generated_at": "2026-08-18T09:34:00Z",
  "freshness": {
    "as_of": "2026-08-17",
    "lag_hint": "daily"
  },
  "cached_at": "2026-08-18T09:40:02Z",
  "window": {
    "start": "2026-08-12",
    "end": "2026-08-18",
    "group_by": "day"
  },
  "compared_to": {
    "start": "2026-06-19",
    "end": "2026-07-18"
  },
  "total": 3,
  "delta": -2,
  "by_type": [
    {
      "type": "recycled",
      "hits": 3
    }
  ],
  "by_source": [
    {
      "source": "cloudmark",
      "hits": 2
    }
  ],
  "hit_rows": {
    "items": [
      {
        "first_seen": "2026-08-14T06:21:00Z",
        "last_seen": "2026-08-16T11:04:00Z",
        "ip_address": "147.253.40.16",
        "source": "cloudmark",
        "type": "recycled",
        "hit_count": 2,
        "trap_age_days": 430
      }
    ],
    "truncated_types": [
      "recycled"
    ],
    "status": "ok"
  }
}

Changes

No recorded changes to this operation across all 2 revisions of this API.