Contact form backend, no servers

Ship a contact form in one line of code.

FormsDock is the backend your contact form has been missing. Drop in the endpoint, get a real inbox, webhooks, and spam protection. No SDK, no vendor lock-in, no server to babysit.

100 submissions a month, free forever. No card required.

~ submit.shLive API
curl -X POST https://api.formdock.dev/v1/submit \
  -H "Authorization: Bearer fk_live_3xq7..." \
  -d "email=ada@analytical.engine" \
  -d "message=Want to chat about your engine?"

Real endpoint. Real response time. No wrapper.

Used in production by indie teams shipping faster

What you get on day one

Everything a serious form needs, nothing it does not.

Single endpoint

POST one URL. We do the rest.

FormsDock accepts multipart and JSON, validates payloads against your schema, stores a SHA-256 hashed copy, and forwards to whatever stack you already run.

submissionAPI
POST /v1/submit
Content-Type: application/json
Authorization: Bearer fk_live_...

{
  "form_id": "contact",
  "fields": {
    "email": "ada@analytical.engine",
    "message": "Hi there"
  }
}

200 OK
{ "id": "sub_01H...", "queued_at": "2026-08-12T18:14:02Z" }

Webhooks

Signed + retried

Every event signed with HMAC-SHA256. Exponential retry up to 24 hours. Dead-letter queue visible in the dashboard.

Spam

Multi-layer blocking

Honeypot, timing heuristics, disposable-email filter, and per-form allow/deny lists. Open the dashboard to see why a submission was blocked.

How it works

From form submission to inbox, in under 250 milliseconds.

Drop-in endpoint

One endpoint, every form

POST to a single URL. We parse, validate, store, and forward to your stack. No SDK lock-in, no auth dance. Bring your existing HTML form or wire one up in 30 seconds.

submit.shcURL
curl -X POST https://api.formdock.dev/v1/submit \
  -H "Authorization: Bearer fk_live_3xq7..." \
  -d "email=ada@analytical.engine" \
  -d "message=Want to chat about your engine?"

Inbox built in

Conversations, not just submissions

Each submission lands in a threaded inbox with sender history, auto-tags, and reply-from-anywhere. Replace your support tool for low-volume contact forms.

# Inbox — last 5 minutes
Ada Lovelace   <ada@analytical.engine>
  "Want to chat about your engine?"
  -> Slack #leads   ok 218ms
  -> Auto-reply     ok 412ms

Tim Berners-Lee <tim@w3.org>
  "Can we test the new endpoint?"
  -> Tagged: partner   ok 89ms
  -> Auto-reply        ok 401ms

Webhooks

Push to your stack the moment it lands

Signed webhook delivery with retry, dead-letter queue, and replay. Forward to Slack, Discord, your CRM, or a Lambda. Average delivery under 250ms.

webhook-payload.json
POST /webhook/forms/fk_3xq7
Content-Type: application/json
X-FormsDock-Signature: sha256=...

{
  "event": "submission.created",
  "form": "contact",
  "data": {
    "email": "ada@analytical.engine",
    "message": "Want to chat?"
  },
  "received_at": "2026-08-12T18:14:02Z"
}

Spam protection

Catch bots before they cost you a cent

Honeypot fields, time-on-page heuristics, disposable-email detection, and a per-form allowlist. Open the dashboard to see exactly what got blocked and why.

verdict.json
{
  "verdict": "allow",
  "score": 0.02,
  "signals": {
    "honeypot": "clean",
    "timing_ms": 4200,
    "geo": "EU",
    "disposable_email": false
  }
}

120ms

P50 submission accept

99.99%

API uptime, last 90 days

0

data we sell or share

Questions

Frequently asked, concisely answered

  • What exactly is FormsDock?
    FormsDock is a drop-in backend for contact forms and lead-capture forms. You get a stable endpoint, a spam-protected inbox, webhooks, and an optional dashboard. You keep your own HTML and your own domain; we handle parsing, validation, storage, and forwarding.
  • How fast does it actually deploy?
    The free tier takes about 60 seconds: paste the endpoint into your existing form, ship. The Pro tier adds custom domains, webhooks, and Slack forwarding, and takes roughly 5 minutes to configure.
  • Where is my data stored, and can I export it?
    Everything lives in Cloudflare D1 (SQLite-compatible) in the region you pick during signup. You can export every submission as CSV or JSON at any time from the dashboard, or stream events to your own database via webhooks.
  • How does pricing work?
    Free covers up to 100 submissions per month with no card required. Paid plans start at $9 per month with annual billing. There is no per-seat fee; one workspace covers your whole team.

Stop wiring up form backends.

Free tier, no card, no time limit on the basics. Move up when you outgrow it.