---
title: "Create saved form"
method: POST
path: "/forms"
tags: ["Widgets"]
---

# Create saved form

`POST /forms`

Creates and publishes a saved signup form. Its opaque form ID becomes a client-safe public capability while audience and success settings remain server-side.

## Request body

- object
  - `name` string, required
  - `listIds` string[], required
  - `tagIds` string[]
  - `duplicateStrategy` 'skip' | 'merge' | 'overwrite'
  - `buttonText` string
  - `headline` string
  - `description` string
  - `successMessage` string
  - `redirectUrl` string, uri
  - `showFirstName` boolean
  - `showLastName` boolean
  - `theme` object — Optional visual theme overrides (accentColor, backgroundColor, textColor, mutedTextColor, cardColor, borderColor as "#rrggbb", borderRadius 0-32, headingFontFamily, bodyFontFamily, density).

## Response `200`

Form created and published

- object
  - `success` boolean
  - `form` object
  - `embed` object

## Other responses

- `400` — Invalid audience, duplicate strategy, or redirect URL
- `401` — Unauthorized
- `403` — API key is missing widgets:write
- `500` — Failed to create form

## Changes

- **2026-08-19** `ba3a29c6eb33` — 4 info
  - added the optional property `retryable` to the response with the `400` status
  - added the optional property `retryable` to the response with the `401` status
  - added the optional property `retryable` to the response with the `403` status
  - added the optional property `retryable` to the response with the `500` status
- **2026-08-16** `6fd2903b91ce` — 4 info
  - added the optional property `code` to the response with the `400` status
  - added the optional property `code` to the response with the `401` status
  - added the optional property `code` to the response with the `403` status
  - added the optional property `code` to the response with the `500` status
- **2026-08-02** `36f92fc0caa2` — 4 breaking, 1 info
  - the response property `success` became optional for the status `400`
  - the response property `success` became optional for the status `401`
  - the response property `success` became optional for the status `403`
  - the response property `success` became optional for the status `500`
  - …1 more
- **2026-07-16** `d7ea66dede72` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/sequenzy/apis/sequenzy-api/changes/forms/post.md)

---

[API](https://skmtc.dev/sequenzy/apis/sequenzy-api.md) · [All operations](https://skmtc.dev/sequenzy/apis/sequenzy-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/sequenzy/sequenzy-api/revisions/73f826277d9a/schema)
