sendsend.email

Create a signup form

POST/v1/forms

A form that adds people to an audience. Each form has a hosted page at its url, which you can link to or embed in a frame, and the same address accepts a plain HTML form POST from your own site. For JavaScript, post JSON to https://api.sendsend.email/public/forms/{id}/subscribe with { "email": "…", "first_name": "…" }; it allows requests from any site.

With double_opt_in (the default) a new person is held as pending, we email them a confirmation link from from, and they are only subscribed when they press the button in it. Pending contacts are never sent a broadcast. Anyone who unsubscribed before must confirm again, even on a form without double opt-in, so nobody can be put back on a list by someone else typing their address. The response never says whether an address was already on the list. Signups are rate limited, and we send at most one confirmation to an address every ten minutes.

Required scope: contacts:manage

Request body

FieldType
audience_idrequiredstring
namerequiredstring
titleoptionalstring
double_opt_inoptionalboolean
fromoptionalstring
confirm_subjectoptionalstring
success_urloptionalstring
confirmed_urloptionalstring
topic_idsoptionalstring[]
collect_nameoptionalboolean
activeoptionalboolean

Unknown fields are rejected, so a typo never silently does nothing.

Example

curl -X POST 'https://api.sendsend.email/v1/forms' \
  -H "Authorization: Bearer $SENDSEND_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{
  "audience_id": "aud_7Qe2…",
  "name": "Footer signup",
  "from": "Acme <news@mail.acme.com>",
  "confirmed_url": "https://acme.com/welcome"
}'

Response 201

{
  "id": "frm_Bn6…",
  "object": "form",
  "audience_id": "aud_7Qe2…",
  "name": "Footer signup",
  "title": "Join the newsletter",
  "double_opt_in": true,
  "from": "Acme <news@mail.acme.com>",
  "confirm_subject": null,
  "success_url": null,
  "confirmed_url": "https://acme.com/welcome",
  "topic_ids": [],
  "collect_name": false,
  "active": true,
  "url": "https://api.sendsend.email/f/frm_Bn6…",
  "created_at": "2026-10-06T15:00:00.000Z",
  "updated_at": "2026-10-06T15:00:00.000Z"
}

Errors

StatusCodeWhen
400validation_errorThe request body or parameters are invalid. The message says which field.
404not_foundNo such resource in this project.
401unauthorizedThe API key is missing, invalid or revoked.
403forbiddenThe key does not have the scope this endpoint needs.

Every error has the same shape. See Errors.