Mailfully logo

List send refusals

GEThttps://api.mailfully.com/v1/refusals

List the sends a quota or review ceiling refused at accept time, newest first. Every 429 on a send route leaves a row here — the reason, how many messages and how many recipients the refused request carried — so you can reconcile a gap in your own send log without replaying the request. Refusals carry counts and a reason only; there is no message content to return, because a refused send is never persisted. Scoped to the calling key's test/live environment. Not paginated: the response is the most recent limit rows. Requires the send or read:emails scope.

Loading code example
Loading code example

Authorizations

Authorizationstringheaderrequired

Bearer authentication header of the form Bearer <token>, where <token> is your auth token.

Query Parameters

limitintegerdefault: 50

Rows to return, 1–200.

Required range: x >= 1, x <= 200
Default: 50

Response

application/json

The most recent refusals.

dataarray<object>required
data.object"send_refusal"required
Allowed values: "send_refusal"
data.idstringrequired

The refusal id (a bare ULID, no prefix).

data.reason"daily_quota_exceeded" | "account_under_review" | "monthly_quota_exceeded" | "spend_cap_exceeded" | "marketing_quota_exceeded"required

The error.type the request was refused with. rate_limit_exceeded never appears here: the per-second limiter refuses before the accept gates run, so it leaves no row.

Allowed values: "daily_quota_exceeded" | "account_under_review" | "monthly_quota_exceeded" | "spend_cap_exceeded" | "marketing_quota_exceeded"
data.messagesintegerrequired

Email objects in the refused request — 1 for a single send, N for a batch.

data.recipientsintegerrequired

Recipients across to/cc/bcc of every object in the refused request. This is the figure the quota was measured against.

data.created_atstring<date-time>required