Bulk sends are repeatable, and traceable by batch

Re-sending a template to the same audience is now fully supported: every launch is its own batch rather than colliding with the last one. The send-bulk response returns a batchId alongside queued and blocked counts, so one campaign can be traced end to end.

Idempotence is scoped to the batch

The protection against sending the same message twice now applies within a batch rather than across all time. That is the distinction that makes a monthly campaign to a stable list possible: the second launch is a different batch, so it is not a duplicate of the first.

Within one batch the guarantee is unchanged. A retried request, a duplicated row in the recipient list, or the same address appearing twice under different casing still results in one message, which is the case idempotence was there for in the first place.

Blocked is not the same as failed

The response separates queued from blocked, and blocked means a compliance refusal: a suppressed address, an unsubscribe, a prior bounce. Those are not errors and retrying them is the wrong response. A batchId with a blocked count is the shape you want for reconciling a campaign against your own records.

Related: Send a bulk email

Everything that has shipped

Private beta

See the next one land

Beta members get the release note in the same batch email that opens their account.