Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 20 additions & 0 deletions .changeset/blocked-reason-not-returned.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
---
"@senderkit/sdk": patch
"@senderkit/cli": patch
---

Correct the `blocked` message documentation: the detailed block reason is operator-only and is not returned by the API.

A prior release documented an optional `Message.blockedReason` field, but the
app's message read endpoints (`GET /api/v1/messages` and
`GET /api/v1/messages/:id`) never project that column — the detailed
anti-phishing/abuse signal breakdown is deliberately operator-only (senderkit-app
#211), so a sender can't learn how detection works. The field was therefore never
populated on any SDK/MCP/CLI response.

- **`Message`** — remove the `blockedReason` field (it was never returned) and
reword the `status` doc accordingly. The `[key: string]: unknown` index
signature is unchanged, so this is not a runtime change for any caller.
- The `blocked` lifecycle status is unaffected: it is still a real, returned
`status` value and remains in `MESSAGE_STATUSES` and the
`senderkit_messages_list.status` filter.
3 changes: 2 additions & 1 deletion packages/sdk/src/mcp-schemas.ts
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,8 @@ const emailEnvelope = {
* The ten message lifecycle statuses (mirrors the app's `messageStatusEnum`).
* Bounces normalize to `failed` with the reason on the message timeline.
* `blocked` is a terminal state set when the outbound abuse scanner halts a
* send (the human-readable trigger is on the message's `blockedReason`).
* send. The detailed block reason is operator-only and is not returned by the
* message read endpoints.
*/
export const MESSAGE_STATUSES = [
"scheduled",
Expand Down
5 changes: 2 additions & 3 deletions packages/sdk/src/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -195,15 +195,14 @@ export interface Message {
publicId: string;
/**
* Lifecycle status (one of `MESSAGE_STATUSES`). A `blocked` message was
* halted by the outbound abuse scanner; `blockedReason` carries the trigger.
* halted by the outbound abuse scanner. The detailed block reason is
* operator-only and is not returned by the message read endpoints.
*/
status: string;
channel: Channel;
templateSlug: string | null;
recipient: string;
createdAt: string;
/** Human-readable reason a `blocked` message was halted. Absent otherwise. */
blockedReason?: string | null;
[key: string]: unknown;
}

Expand Down