Back to Skills

sent-integration-starter

Stands up a production-ready Sent v3 integration in an existing codebase — SDK selection and client construction, x-api-key configuration, idempotent sends, retry and rate-limit handling, the 46-code error catalog, sandbox verification, and a verified webhook receiver. Use when adding Sent to an app for the first time, choosing an SDK or framework wiring, handling 429 or 409 responses, deciding what to log, or hardening an integration before launch.

79starsUpdated 8/20/2026

Security Assessment

Safe(93/100)
Security Score93/100

About sent-integration-starter

Sent Integration Starter stands up a production-ready Sent v3 messaging integration in an existing codebase. It solves the problem that most broken integrations authenticate and send but skip the receiver and hardening, by structuring the work into four explicit stages - authenticate, send idempotently, receive verified events, then harden - and refusing to conflate them.

Stage one covers SDK selection across TypeScript, Python, Go, Java, C#, PHP, and Ruby, client construction, and x-api-key authentication (with notes on Bearer-accepting proxies, MCP OAuth, and x-profile-id behavior), including reading credentials from SENT_DM_API_KEY / SENT_DM_WEBHOOK_SECRET environment variables and validating configuration at boot. Stage two covers idempotent sends: supplying to plus template or text, omitting channel so automatic routing applies (never writing a multi-value channel array that broadcasts and multiplies charges), sending a deterministically derived Idempotency-Key on every mutating call, and treating 202 as accepted rather than delivered. Stage three builds a verified webhook receiver with HMAC-SHA256 verification over id.timestamp.raw_body, constant-time comparison, a 300-second timestamp window, and dedupe keys, since no SDK ships a verifier. A reference catalog documents all 46 error codes with per-family retry classification, rate-limit and lockout behavior, and sandbox semantics, and a preflight.py script supports pre-launch checks.

It targets developers adding Sent to an app for the first time, choosing an SDK or wiring a framework, handling 429 or 409 responses, deciding what to log, or hardening before launch. Its guidance is security-conscious: credentials come from environment variables via official SDKs, tenant credentials are isolated per request in multi-tenant proxies, and signatures are verified in constant time - with no exfiltration or unsafe execution.

FAQ

Which languages and SDKs does it support?

TypeScript (@sentdm/sentdm), Python (sentdm), Go (sent-dm-go), Java (sent-java), C# (Sentdm), PHP (sentdm/sent-dm-php), and Ruby (sentdm), with the right client constructor for each.

How are credentials configured?

Via environment variables read by the official SDKs - SENT_DM_API_KEY for the API key and SENT_DM_WEBHOOK_SECRET for the webhook secret (older SENT_API_KEY / SENT_WEBHOOK_SECRET names are treated as aliases) - and validated at boot so a missing key fails fast.

Why does it stress the webhook receiver?

Because an integration without a receiver has no delivery truth, and no SDK ships a verifier. It specifies HMAC-SHA256 over id.timestamp.raw_body, constant-time comparison, a 300-second timestamp window, and deduplication.

How does it avoid accidental double charges?

By requiring a deterministic Idempotency-Key on every POST/PUT/PATCH, warning never to write a multi-value channel array (which broadcasts and multiplies charges), and treating a 202 as accepted rather than delivered.

What reference material is included?

A catalog of all 46 error codes with retry classification by family, rate-limit and credential-lockout behavior, idempotency and sandbox semantics, plus SDK/framework wiring notes and a preflight.py check.

All Files

5 files
references/errors-and-limits.md11.0 KB
View
scripts/preflight.py12.1 KB
View
agents/openai.yaml0.3 KB
View
references/sdk-and-frameworks.md9.5 KB
View
SKILL.md8.5 KB
View

Install sent-integration-starter

Download and extract the skill files to your .claude/skills/ directory.

Quick Setup:

  1. Copy the skill folder to .claude/skills/
  2. Claude will automatically detect and use the skill