Define lifecycle emails in TypeScript. Deploy via API. The engine learns from every send to optimize timing, content, and conversions.
Every SaaS team hand-rolls email sequences. Cron jobs. Sidekiq workers. A forgotten script that sends the wrong email at 3am.
You've already built this badly. We built it well.
Define sequences in code
import { sequence, send, wait, condition } from "@dripctl/sdk";
export const onboarding = sequence("trial-nurture", {
trigger: "user.signup",
optimize: true, // ← the engine learns what converts
steps: [
send("welcome", { template: "welcome-v2" }),
wait("3 days"),
condition("user.activated", {
yes: send("tips", { template: "power-user-tips" }),
no: [
send("nudge", { template: "activation-nudge" }),
wait("2 days"),
send("last-chance", { template: "trial-ending" }),
],
}),
],
});Version controlled. Code reviewed. Tested in CI. Deployed via API.
No dashboard required. Every operation is an API call. Build email automation into your product, not around it.
Deploy a sequence
curl -X POST https://api.dripctl.dev/v1/sequences \
-H "Authorization: Bearer sk_..." \
-d '{
"name": "trial-nurture",
"trigger": "user.signup",
"definition": {
"steps": [
{ "type": "send", "template": "welcome" },
{ "type": "wait", "delay": "3 days" },
{ "type": "send", "template": "tips" }
]
}
}'One call. Sequence is live. Roll back any time.
Trigger with events
curl -X POST https://api.dripctl.dev/v1/events \
-H "Authorization: Bearer sk_..." \
-d '{
"eventType": "user.signup",
"userId": "jane@acme.com",
"metadata": {
"tenantId": "your-tenant-id",
"plan": "free"
}
}'Events trigger matching sequences automatically.
Manage users
curl -X POST https://api.dripctl.dev/v1/users \
-H "Authorization: Bearer sk_..." \
-d '{
"email": "jane@acme.com",
"properties": {
"plan": "free",
"company": "Acme"
}
}'Upsert user profiles. Properties available in sequence conditions.
Inspect runs
curl https://api.dripctl.dev/v1/runs/run_8f2ka \
-H "Authorization: Bearer sk_..."
# Response:
{
"status": "running",
"currentStep": "wait",
"resumesAt": "2026-03-24T10:00:00Z",
"stepsCompleted": 2,
"emailsSent": 1
}See exactly where every user is in every sequence.
Version control. Code review. CI/CD. Define email logic the same way you define everything else — in code. Not drag-and-drop.
Every send, open, and click feeds into an adaptive memory layer. Over time, the engine learns which sequences convert and adjusts timing and content. Currently in development — early adopters shape how it works.
Your Resend or SES account. Your sending reputation. Your infrastructure. dripctl handles the orchestration.
Write sequences in TypeScript using the dripctl SDK. Triggers, conditions, delays, sends — all in code. Push to your repo like any other feature.
One API call deploys your sequence. Version controlled. Roll back instantly.
Every send, open, click, and conversion is tracked. The engine builds a model of what works. Self-optimization is in development — early access users help shape it.
The @dripctl/sdk is live on npm. Full API reference and guides ship with the private beta.
npm install @dripctl/sdk
281 commits and counting.
Built by a developer, for developers. Private beta coming soon.
Join the waitlist. We'll let you know when it's ready.