---
title: "Partially update a signup form"
method: PATCH
path: "/v1/projectId/{projectId}/signup-forms/{id}"
tags: ["Signup Forms"]
---

# Partially update a signup form

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

## Request

- Base URL: `https://api.bluefox.email`
- URL: `https://api.bluefox.email/v1/projectId/{projectId}/signup-forms/{id}`
- Auth: HTTP bearer

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.

## Path parameters

- `projectId` string, required
- `id` string, required

## Request body

- SignUpFormInputPatch: doubleOptIn.emailId is required when doubleOptIn.active is true, and that email's content must include {{verifyLink}} - the API rejects enabling it otherwise.
  - `name` string
  - `published` boolean: When true, the form is reachable at the BlueFox-hosted URL bluefox.email/signup/{slug}. Requires a slug - either set here or already on the form.
  - `slug` string: URL-friendly identifier for the BlueFox-hosted signup page. Not generated automatically; rejected with a 400 if already taken by another form.
  - `pageHeadline` string: Shown as the heading on the BlueFox-hosted signup page. Falls back to the project name if not set.
  - `pageDescription` string: Shown under the headline on the BlueFox-hosted signup page.
  - `useDefaultTurnstile` boolean: Defaults to true. When true, the BlueFox-hosted page (not embeds) shows and validates BlueFox's own Turnstile challenge, regardless of captchaType below - which still governs embeds, and governs the hosted page too when this is false.
  - `subscriberListIds` string[]
  - `formLayout` string
  - `showCaptcha` boolean
  - `captchaType` 'none' | 'svg' | 'turnstile'
  - `turnstileSiteKey` string
  - `turnstileSecretKey` string: Write-only - never returned. Encrypted at rest.
  - `turnstileTheme` 'light' | 'dark' | 'auto'
  - `turnstileSize` 'normal' | 'compact' | 'flexible'
  - `turnstileAppearance` 'always' | 'execute' | 'interaction-only'
  - `emailPlaceholder` string
  - `captchaPlaceholder` string
  - `formFontStyle` string
  - `formFontColor` string
  - `formFontSize` string
  - `btnLabel` string
  - `btnFont` string
  - `btnFontColor` string
  - `btnColor` string
  - `btnFontSize` string
  - `successMessage` string
  - `successFont` string
  - `successFontColor` string
  - `successFontSize` string
  - `redirectLink` string
  - `termsAndConditions` object
    - `show` boolean
    - `label` string
    - `linkLabel` string
    - `link` string
  - `propertiesStyle` object
  - `doubleOptIn` object: Replaces 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.
    - `active` boolean
    - `redirectLink` string
    - `emailId` string
    - `confirmationTitle` string
    - `confirmationMessage` string

## Response `200`

OK

- object
  - `status` integer
  - `result` SignUpForm
    - `_id` string
    - `name` string
    - `published` boolean: When true, the form is reachable at the BlueFox-hosted URL bluefox.email/signup/{slug}.
    - `slug` string: URL-friendly identifier used for the BlueFox-hosted signup page.
    - `pageHeadline` string: Shown as the heading on the BlueFox-hosted signup page. Falls back to the project name if not set.
    - `pageDescription` string: Shown under the headline on the BlueFox-hosted signup page.
    - `useDefaultTurnstile` boolean: Defaults to true. When true, the BlueFox-hosted page (not embeds) shows and validates BlueFox's own Turnstile challenge, regardless of captchaType below - which still governs embeds, and governs the hosted page too when this is false.
    - `subscriberListIds` string[]
    - `formLayout` string
    - `showCaptcha` boolean
    - `captchaType` 'none' | 'svg' | 'turnstile'
    - `turnstileSiteKey` string
    - `turnstileSecretKeyHint` string: The real secret is never returned - this is a decrypt-and-mask hint showing it's set (e.g. "ab**...**yz").
    - `turnstileTheme` 'light' | 'dark' | 'auto'
    - `turnstileSize` 'normal' | 'compact' | 'flexible'
    - `turnstileAppearance` 'always' | 'execute' | 'interaction-only'
    - `emailPlaceholder` string
    - `captchaPlaceholder` string
    - `formFontStyle` string
    - `formFontColor` string
    - `formFontSize` string
    - `btnLabel` string
    - `btnFont` string
    - `btnFontColor` string
    - `btnColor` string
    - `btnFontSize` string
    - `successMessage` string
    - `successFont` string
    - `successFontColor` string
    - `successFontSize` string
    - `redirectLink` string: Where 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.
    - `termsAndConditions` object
      - `show` boolean
      - `label` string
      - `linkLabel` string
      - `link` string
    - `propertiesStyle` object: Per custom-contact-field display settings, keyed by field name: { show, required, placeholder, order }.
    - `doubleOptIn` object
      - `active` boolean
      - `redirectLink` string: Where a visitor lands after clicking the confirmation link in their email. Only relevant when active is true. Different from the top-level redirectLink above.
      - `emailId` string: A transactional email _id used to send the confirmation email. Its content must include {{verifyLink}}.
      - `confirmationTitle` string
      - `confirmationMessage` string
    - `createdAt` string, date-time
    - `updatedAt` string, date-time

## Other responses

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

---

[API](https://skmtc.dev/bluefox/apis/bluefox-email-public-api.md) · [All operations](https://skmtc.dev/bluefox/apis/bluefox-email-public-api/llms.txt) · [OpenAPI document](https://skmtc.dev/bluefox/apis/bluefox-email-public-api/revisions/fa1a0a835c7f?raw)
