Skip to content

WebhookEvent knows email.scheduled, email.failed, email.suppressed and email.prefetched (0.10.0) - #19

Merged
heliocosta-dev merged 3 commits into
mainfrom
feat/webhook-events-0.15.1
Oct 17, 2026
Merged

heliocosta-dev merged 3 commits into
mainfrom
feat/webhook-events-0.15.1

Conversation

@heliocosta-dev

Copy link
Copy Markdown
Member

Matches MillionSend v0.15.1. Releases as 0.10.0.

  • WebhookEvent gains EMAIL_SCHEDULED, EMAIL_FAILED and EMAIL_SUPPRESSED in the server's order, plus the opt-in EMAIL_PREFETCHED. Java callers couldn't subscribe to email.prefetched before, because CreateWebhookOptions takes only WebhookEvent.
  • suppression.added / removed are no longer labeled MillionSend extensions: Resend emits them too.
  • Suppression.getSourceId() is documented as the email whose bounce or complaint created the entry, and null otherwise. Unsubscribes and API-added entries are null too.
  • The README covers the new events' data, source_id, and the suppressed email kept when the suppression list alone refuses a send. It also gains a v0.15.1 row in "Server versions".
  • pom.xml and HttpClient.VERSION are now 0.10.0.
  • Tests in ParityTest cover the wire names both ways and the webhook create body.

Lint and javadoc pass, and tests pass locally. After merge, tag v0.10.0 to publish (the release now builds a valid Central bundle, #18).

🤖 Generated with Claude Code

heliocosta-dev and others added 3 commits October 17, 2026 10:02
… (0.10.0)

- EMAIL_SCHEDULED comes before EMAIL_SENT, and EMAIL_FAILED and
  EMAIL_SUPPRESSED right after EMAIL_COMPLAINED, in the server's order.
  They need MillionSend v0.15.1 or later; an older server answers
  422 validation_error to a webhook naming them.
- Docs: what each one means, data.failed.reason and data.suppressed,
  source_id on suppression.added and suppression.removed, and the
  v0.15.1 row under Server versions. suppression.* events are no longer
  called MillionSend extensions: Resend emits them too.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- EMAIL_PREFETCHED sits between EMAIL_CLICKED and EMAIL_RECEIVED, in the
  server's order. CreateWebhookOptions takes only WebhookEvent, so Java
  callers could not subscribe to it before. It is opt-in: an endpoint
  gets it only by naming it, never through all events.
- README: the opt-in note for email.prefetched, and the metadata-only
  suppressed email an all-suppressed POST /emails keeps from v0.15.1
  (each retry keeps another, even with the same Idempotency-Key).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
….15.1 row

The server sets a suppression's source_id only when an SES bounce or
complaint creates the entry; unsubscribes and entries added through the
API carry null too, not only manual ones. The README's v0.15.1 row now
names the suppressed email kept when the suppression list alone refuses
a send, and the prefetched triggers read as examples.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@heliocosta-dev
heliocosta-dev merged commit 650af64 into main Oct 17, 2026
4 checks passed
@heliocosta-dev
heliocosta-dev deleted the feat/webhook-events-0.15.1 branch October 17, 2026 13:52
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant