Skip to content
bluefox.email logoBlueFox Email
Main Navigation HomeFeaturesPricing
Marketing Agencies
Occasional Senders
SaaS Companies
Amazon SES Users
Docs
Tutorials
Articles
Free Tools
Login
Get Started for Free

Appearance

Sidebar Navigation

Docs

Getting Started

Account Dashboard

Account Users

Account Settings

Projects

Project Dashboard

Creating a new project

Email Editors

Pre-designed Templates

Delivery Modes

Transactional Emails

Triggered Emails

Campaigns

Data Feeds

Send Test Emails

Automations

Contacts

Segments

Forms & Pages

Email Theme Settings

Suppression Lists

Settings

API

Project

Sender Identities

Domains

Webhook

Sending Setup

Production Access

BYO AWS

Design Systems

Templates

Campaigns

Transactional Emails

Triggered Emails

Send Email

Test Email

Email Error Log

Contacts

Segments

Subscriber Lists

Subscriptions

Signup Forms

Suppression List

Legacy Endpoints

Contacts Management

Subscriber List Management

Send Transactional Email

Send Triggered Email

Send Attachments

Integrations

Webhooks for Event Notifications

Supabase

Zapier

Statistics

Google Postmaster Tools Feedback Identifiers

Email Personalization (Merge Tags)

Email Themes

Email Theme Basics

Email Theme Components

Blocks (or modules)

Templates

Pricing

Why?

About

Terms of use

Privacy policy

Refund policy

Partners

On this page

Signup Forms ​

Full reference for the Signup Forms resource in the bluefox.email API. See the API overview for authentication, the response envelope, and pagination.

List signup forms ​

GET /v1/projectId/{projectId}/signup-forms

Parameters ​

NameInTypeRequiredDescription
projectIdpathstringyesThe project _id, found in the app under Project Settings.
limitqueryintegerMax items per page. Capped at 30.
skipqueryintegerNumber of items to skip, for pagination.
sortquerystringField to sort by.
orderquerystring
filter[<field>]querystringExact-match filter on a top-level field, e.g. filter[name]=Welcome. Repeatable for multiple fields.

Responses ​

StatusDescription
200OK
403Missing or invalid API key

Response body ​

FieldTypeRequiredDescription
itemsarray
countintegerTotal matching items across all pages, not just this page.
nextstringFull URL (path + query string) of the next page, or null if this is the last page.

Create a signup form ​

POST /v1/projectId/{projectId}/signup-forms

doubleOptIn.emailId (if given) must be a transactional email belonging to this same project - a valid ID from a different project 404s. When doubleOptIn.active is true, that email's content must also include {{verifyLink}}. See also GET .../signup-forms/{id}/embed for the ready-to-paste HTML.

Parameters ​

NameInTypeRequiredDescription
projectIdpathstringyesThe project _id, found in the app under Project Settings.

Request body ​

FieldTypeRequiredDescription
namestringyes
subscriberListIdsarray of string
formLayoutstring
showCaptchaboolean
captchaTypestring (none | svg | turnstile)
turnstileSiteKeystring
turnstileSecretKeystringWrite-only - never returned. Encrypted at rest.
turnstileThemestring (light | dark | auto)
turnstileSizestring (normal | compact | flexible)
turnstileAppearancestring (always | execute | interaction-only)
emailPlaceholderstring
captchaPlaceholderstring
formFontStylestring
formFontColorstring
formFontSizestring
btnLabelstring
btnFontstring
btnFontColorstring
btnColorstring
btnFontSizestring
successMessagestring
successFontstring
successFontColorstring
successFontSizestring
redirectLinkstring
termsAndConditionsobject
termsAndConditions.showboolean
termsAndConditions.labelstring
termsAndConditions.linkLabelstring
termsAndConditions.linkstring
propertiesStyleobject
doubleOptInobjectReplaces the whole object when given - to change just one field, GET the current value first and send all five back together. Do not include the GET response's doubleOptIn._id - it is Mongoose's own subdocument id, not a real field, and PATCH rejects it as unexpected.
doubleOptIn.activeboolean
doubleOptIn.redirectLinkstring
doubleOptIn.emailIdstring
doubleOptIn.confirmationTitlestring
doubleOptIn.confirmationMessagestring

Responses ​

StatusDescription
201Created
400Invalid request body or query - every violation found (missing/invalid/unexpected fields) is reported in one response, semicolon-separated, not just the first one hit.
403Missing or invalid API key

Response body ​

FieldTypeRequiredDescription
_idstring
namestring
subscriberListIdsarray of string
formLayoutstring
showCaptchaboolean
captchaTypestring (none | svg | turnstile)
turnstileSiteKeystring
turnstileSecretKeyHintstringThe real secret is never returned - this is a decrypt-and-mask hint showing it's set (e.g. "ab**...**yz").
turnstileThemestring (light | dark | auto)
turnstileSizestring (normal | compact | flexible)
turnstileAppearancestring (always | execute | interaction-only)
emailPlaceholderstring
captchaPlaceholderstring
formFontStylestring
formFontColorstring
formFontSizestring
btnLabelstring
btnFontstring
btnFontColorstring
btnColorstring
btnFontSizestring
successMessagestring
successFontstring
successFontColorstring
successFontSizestring
redirectLinkstringWhere a visitor lands immediately after submitting the form - used when double opt-in is off, or is on but not yet confirmed. Different from doubleOptIn.redirectLink below.
termsAndConditionsobject
termsAndConditions.showboolean
termsAndConditions.labelstring
termsAndConditions.linkLabelstring
termsAndConditions.linkstring
propertiesStyleobjectPer custom-contact-field display settings, keyed by field name: { show, required, placeholder, order }.
doubleOptInobject
doubleOptIn.activeboolean
doubleOptIn.redirectLinkstringWhere a visitor lands after clicking the confirmation link in their email. Only relevant when active is true. Different from the top-level redirectLink above.
doubleOptIn.emailIdstringA transactional email _id used to send the confirmation email. Its content must include {{verifyLink}}.
doubleOptIn.confirmationTitlestring
doubleOptIn.confirmationMessagestring
createdAtstring
updatedAtstring

Get a single signup form ​

GET /v1/projectId/{projectId}/signup-forms/{id}

Parameters ​

NameInTypeRequiredDescription
projectIdpathstringyesThe project _id, found in the app under Project Settings.
idpathstringyes

Responses ​

StatusDescription
200OK
403Missing or invalid API key
404Signup Forms not found

Response body ​

FieldTypeRequiredDescription
_idstring
namestring
subscriberListIdsarray of string
formLayoutstring
showCaptchaboolean
captchaTypestring (none | svg | turnstile)
turnstileSiteKeystring
turnstileSecretKeyHintstringThe real secret is never returned - this is a decrypt-and-mask hint showing it's set (e.g. "ab**...**yz").
turnstileThemestring (light | dark | auto)
turnstileSizestring (normal | compact | flexible)
turnstileAppearancestring (always | execute | interaction-only)
emailPlaceholderstring
captchaPlaceholderstring
formFontStylestring
formFontColorstring
formFontSizestring
btnLabelstring
btnFontstring
btnFontColorstring
btnColorstring
btnFontSizestring
successMessagestring
successFontstring
successFontColorstring
successFontSizestring
redirectLinkstringWhere a visitor lands immediately after submitting the form - used when double opt-in is off, or is on but not yet confirmed. Different from doubleOptIn.redirectLink below.
termsAndConditionsobject
termsAndConditions.showboolean
termsAndConditions.labelstring
termsAndConditions.linkLabelstring
termsAndConditions.linkstring
propertiesStyleobjectPer custom-contact-field display settings, keyed by field name: { show, required, placeholder, order }.
doubleOptInobject
doubleOptIn.activeboolean
doubleOptIn.redirectLinkstringWhere a visitor lands after clicking the confirmation link in their email. Only relevant when active is true. Different from the top-level redirectLink above.
doubleOptIn.emailIdstringA transactional email _id used to send the confirmation email. Its content must include {{verifyLink}}.
doubleOptIn.confirmationTitlestring
doubleOptIn.confirmationMessagestring
createdAtstring
updatedAtstring

Partially update a signup form ​

PATCH /v1/projectId/{projectId}/signup-forms/{id}

Merges the given fields into the existing document - omitted fields are left unchanged. Nothing is required (unlike create) since every field is optional on a partial update.

doubleOptIn.emailId and the {{verifyLink}} content requirement are re-validated the same way as create.

Parameters ​

NameInTypeRequiredDescription
projectIdpathstringyesThe project _id, found in the app under Project Settings.
idpathstringyes

Request body ​

FieldTypeRequiredDescription
namestring
subscriberListIdsarray of string
formLayoutstring
showCaptchaboolean
captchaTypestring (none | svg | turnstile)
turnstileSiteKeystring
turnstileSecretKeystringWrite-only - never returned. Encrypted at rest.
turnstileThemestring (light | dark | auto)
turnstileSizestring (normal | compact | flexible)
turnstileAppearancestring (always | execute | interaction-only)
emailPlaceholderstring
captchaPlaceholderstring
formFontStylestring
formFontColorstring
formFontSizestring
btnLabelstring
btnFontstring
btnFontColorstring
btnColorstring
btnFontSizestring
successMessagestring
successFontstring
successFontColorstring
successFontSizestring
redirectLinkstring
termsAndConditionsobject
termsAndConditions.showboolean
termsAndConditions.labelstring
termsAndConditions.linkLabelstring
termsAndConditions.linkstring
propertiesStyleobject
doubleOptInobjectReplaces the whole object when given - to change just one field, GET the current value first and send all five back together. Do not include the GET response's doubleOptIn._id - it is Mongoose's own subdocument id, not a real field, and PATCH rejects it as unexpected.
doubleOptIn.activeboolean
doubleOptIn.redirectLinkstring
doubleOptIn.emailIdstring
doubleOptIn.confirmationTitlestring
doubleOptIn.confirmationMessagestring

Responses ​

StatusDescription
200OK
400Invalid request body or query - every violation found (missing/invalid/unexpected fields) is reported in one response, semicolon-separated, not just the first one hit.
403Missing or invalid API key
404Signup Forms not found

Response body ​

FieldTypeRequiredDescription
_idstring
namestring
subscriberListIdsarray of string
formLayoutstring
showCaptchaboolean
captchaTypestring (none | svg | turnstile)
turnstileSiteKeystring
turnstileSecretKeyHintstringThe real secret is never returned - this is a decrypt-and-mask hint showing it's set (e.g. "ab**...**yz").
turnstileThemestring (light | dark | auto)
turnstileSizestring (normal | compact | flexible)
turnstileAppearancestring (always | execute | interaction-only)
emailPlaceholderstring
captchaPlaceholderstring
formFontStylestring
formFontColorstring
formFontSizestring
btnLabelstring
btnFontstring
btnFontColorstring
btnColorstring
btnFontSizestring
successMessagestring
successFontstring
successFontColorstring
successFontSizestring
redirectLinkstringWhere a visitor lands immediately after submitting the form - used when double opt-in is off, or is on but not yet confirmed. Different from doubleOptIn.redirectLink below.
termsAndConditionsobject
termsAndConditions.showboolean
termsAndConditions.labelstring
termsAndConditions.linkLabelstring
termsAndConditions.linkstring
propertiesStyleobjectPer custom-contact-field display settings, keyed by field name: { show, required, placeholder, order }.
doubleOptInobject
doubleOptIn.activeboolean
doubleOptIn.redirectLinkstringWhere a visitor lands after clicking the confirmation link in their email. Only relevant when active is true. Different from the top-level redirectLink above.
doubleOptIn.emailIdstringA transactional email _id used to send the confirmation email. Its content must include {{verifyLink}}.
doubleOptIn.confirmationTitlestring
doubleOptIn.confirmationMessagestring
createdAtstring
updatedAtstring

Delete a signup form ​

DELETE /v1/projectId/{projectId}/signup-forms/{id}

Parameters ​

NameInTypeRequiredDescription
projectIdpathstringyesThe project _id, found in the app under Project Settings.
idpathstringyes

Responses ​

StatusDescription
200Deleted
403Missing or invalid API key
404Signup Forms not found

Response body ​

FieldTypeRequiredDescription
_idstring
namestring
subscriberListIdsarray of string
formLayoutstring
showCaptchaboolean
captchaTypestring (none | svg | turnstile)
turnstileSiteKeystring
turnstileSecretKeyHintstringThe real secret is never returned - this is a decrypt-and-mask hint showing it's set (e.g. "ab**...**yz").
turnstileThemestring (light | dark | auto)
turnstileSizestring (normal | compact | flexible)
turnstileAppearancestring (always | execute | interaction-only)
emailPlaceholderstring
captchaPlaceholderstring
formFontStylestring
formFontColorstring
formFontSizestring
btnLabelstring
btnFontstring
btnFontColorstring
btnColorstring
btnFontSizestring
successMessagestring
successFontstring
successFontColorstring
successFontSizestring
redirectLinkstringWhere a visitor lands immediately after submitting the form - used when double opt-in is off, or is on but not yet confirmed. Different from doubleOptIn.redirectLink below.
termsAndConditionsobject
termsAndConditions.showboolean
termsAndConditions.labelstring
termsAndConditions.linkLabelstring
termsAndConditions.linkstring
propertiesStyleobjectPer custom-contact-field display settings, keyed by field name: { show, required, placeholder, order }.
doubleOptInobject
doubleOptIn.activeboolean
doubleOptIn.redirectLinkstringWhere a visitor lands after clicking the confirmation link in their email. Only relevant when active is true. Different from the top-level redirectLink above.
doubleOptIn.emailIdstringA transactional email _id used to send the confirmation email. Its content must include {{verifyLink}}.
doubleOptIn.confirmationTitlestring
doubleOptIn.confirmationMessagestring
createdAtstring
updatedAtstring

Get a signup form's embeddable HTML ​

GET /v1/projectId/{projectId}/signup-forms/{id}/embed

Returns the same self-contained HTML (styling, markup, and captcha/submit JS included) shown on the dashboard's "embed" tab - ready to paste as-is into an external site. Returns a raw HTML file (Content-Disposition attachment), not the usual {status, result} JSON envelope.

Parameters ​

NameInTypeRequiredDescription
projectIdpathstringyesThe project _id, found in the app under Project Settings.
idpathstringyes

Responses ​

StatusDescription
200HTML file
403Missing or invalid API key
404Signup form not found
Pager
PreviousSubscriptions
NextSuppression List