You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Today there is no built-in way for a SendDock user to capture subscribers from their own site. They have to either:
Build a custom HTML form and wire it to POST /api/v1/projects/{id}/subscribers (requires backend or proxying API keys, plus their own anti-bot, plus confirmation flow)
Use a third-party form tool (Typeform, Tally, Google Forms) and Zapier — adds cost and brittleness
EmailOctopus, Mailchimp and Beehiiv all ship an embeddable JS widget specifically because the form is the funnel mouth. Without it, the path from "potential subscriber on a marketing site" to "row in the database" is harder than it should be.
Proposal
A drop-in embeddable signup form distributed as a single script tag.
The script bootstraps a styled form inline at the target element. Fields are configurable per form via a builder in the SendDock UI (more on that below).
Set custom field defaults (e.g. signup_source: "homepage")
Anti-abuse: honeypot field + Cloudflare Turnstile / hCaptcha toggle (configurable site key per project)
API additions
POST /api/v1/projects/{id}/forms create form definition
GET /api/v1/projects/{id}/forms list
GET /widget.js?project=...&form=... returns the rendered widget JS (cached at the edge)
POST /api/v1/projects/{id}/forms/{formId}/submit public endpoint the widget hits with CORS open to the form's allowed origins (configurable per form, default *)
Rate-limited per IP to prevent abuse
Confirmation flow (double opt-in)
When double opt-in is enabled, submission creates the subscriber with status = pending and sends the configured confirmation template. The confirmation link hits GET /api/v1/projects/{id}/confirm/{token} which flips status to active. The existing unsubscribe page pattern is reused for the confirmation success page.
Problem
Today there is no built-in way for a SendDock user to capture subscribers from their own site. They have to either:
POST /api/v1/projects/{id}/subscribers(requires backend or proxying API keys, plus their own anti-bot, plus confirmation flow)EmailOctopus, Mailchimp and Beehiiv all ship an embeddable JS widget specifically because the form is the funnel mouth. Without it, the path from "potential subscriber on a marketing site" to "row in the database" is harder than it should be.
Proposal
A drop-in embeddable signup form distributed as a single script tag.
Embed
The script bootstraps a styled form inline at the target element. Fields are configurable per form via a builder in the SendDock UI (more on that below).
Form builder UI
New section Project → Forms with CRUD:
nameand any project custom field (from Custom fields for subscribers (typed attributes beyond email/name) #72). Per-field: label, placeholder, required toggle, helper text.signup_source: "homepage")API additions
POST /api/v1/projects/{id}/formscreate form definitionGET /api/v1/projects/{id}/formslistGET /widget.js?project=...&form=...returns the rendered widget JS (cached at the edge)POST /api/v1/projects/{id}/forms/{formId}/submitpublic endpoint the widget hits with CORS open to the form's allowed origins (configurable per form, default*)Confirmation flow (double opt-in)
When double opt-in is enabled, submission creates the subscriber with
status = pendingand sends the configured confirmation template. The confirmation link hitsGET /api/v1/projects/{id}/confirm/{token}which flips status toactive. The existing unsubscribe page pattern is reused for the confirmation success page.Acceptance criteria
<script>tag withdata-projectanddata-formattributesTier
Core — table stakes for any subscription tool. Without this, the funnel from prospect to subscriber is broken.
Blocked by