Skip to content

feat(messages): surface provider-reported open/click engagement#69

Merged
tuyakhov merged 1 commit into
mainfrom
claude/wizardly-brown-56qo2v
Jul 8, 2026
Merged

feat(messages): surface provider-reported open/click engagement#69
tuyakhov merged 1 commit into
mainfrom
claude/wizardly-brown-56qo2v

Conversation

@tuyakhov

@tuyakhov tuyakhov commented Jul 8, 2026

Copy link
Copy Markdown
Contributor

Summary

SenderKit now records provider-reported email opens and link clicks on messages and emits matching outgoing webhook events. This change brings the SDK, CLI, and webhook docs up to date with those new read surfaces.

Both timestamps are read-only and set once on the first occurrence — later opens/clicks never update them. They're purely additive and backwards compatible.

SDK (@senderkit/sdk)

  • Message gains two fields, returned by messages.get and messages.list:
    • openedAt — first provider-reported email open, as an ISO 8601 string, or null until opened.
    • clickedAt — first provider-reported link click, as an ISO 8601 string, or null until a link is clicked.

CLI (@senderkit/cli)

  • senderkit messages get now prints openedAt / clickedAt (shown as when unset).

Webhooks

  • Two new subscribable event types: message.opened and message.clicked.
  • These are engagement signals and never change a message's status (delivered stays the terminal state).
  • The message.clicked payload additionally carries the clicked link.

Testing

  • pnpm -r typecheck — clean
  • pnpm build — clean
  • pnpm test — all packages green (sdk 59, cli 80)

A changeset is included (@senderkit/sdk minor, @senderkit/cli minor).

The Python and PHP SDKs receive the equivalent field additions in their own PRs.

🤖 Generated with Claude Code


Generated by Claude Code

Adds the new read-only engagement timestamps returned by the messages API:

- openedAt: first provider-reported email open (ISO 8601), or null.
- clickedAt: first provider-reported link click (ISO 8601), or null.

Both are set once on the first occurrence and are exposed on the SDK Message
type and printed by `senderkit messages get`. Also documents the two new
subscribable webhook events, message.opened and message.clicked (the latter
carries the clicked link). README + changeset added.
@tuyakhov tuyakhov merged commit 89a2e25 into main Jul 8, 2026
1 check passed
@tuyakhov tuyakhov deleted the claude/wizardly-brown-56qo2v branch July 8, 2026 21:23
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.

2 participants