Skip to content

Save a signup form (Save & publish)

PUT
/api/v1/workspaces/{workspace}/forms/{form}
curl --request PUT \
--url https://reputecast.example.com/api/v1/workspaces/acme-newsletter/forms/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0 \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{ "afterSubmit": "message", "allowedOrigins": [ "example" ], "consentText": "example", "content": { "afterSubmitText": "example", "button": "example", "description": "example", "emailPlaceholder": "example", "footnote": "example", "heading": "example", "listsLabel": "example", "namePlaceholder": "example", "popupDelay": 1, "popupRepeatDays": 1, "popupScroll": 1, "smsConsent": true, "smsConsentText": "example", "smsConsentVersion": 1 }, "defaultListIds": [ "example" ], "doubleOptIn": true, "fields": [ { "key": "example", "label": "example", "required": true } ], "kind": "embedded", "listChoice": true, "listIds": [ "example" ], "name": "example", "publish": true, "redirectUrl": "example", "spam": { "blockDisposable": true, "honeypot": true, "minSeconds": 1, "rateLimitPerIp": 1, "turnstile": true } }'

Permission: forms:edit

Changing the consent text starts a new consent version; every consent event records the exact text and its version.

workspace
required

Workspace slug

string
/^[a-z0-9][a-z0-9-]{1,62}$/

Workspace slug

form
required

Form id

string format: uuid

Form id

Media typeapplication/json
object
afterSubmit
required
string
Allowed values: message redirect
allowedOrigins
required
Array<string>
<= 50 items
consentText
required
string
<= 600 characters
content
required
object
afterSubmitText
string
<= 300 characters
button
required
string
<= 40 characters
description
required
string
<= 500 characters
emailPlaceholder
required
string
<= 80 characters
footnote
required
string
<= 300 characters
heading
required
string
<= 120 characters
listsLabel
required
string
<= 80 characters
namePlaceholder
required
string
<= 80 characters
popupDelay
required

Seconds before a popup opens

integer format: int64
<= 600
popupRepeatDays
required

Days a closed popup stays closed

integer format: int64
<= 365
popupScroll
required

Percent of the page scrolled before a popup opens; 0 is off

integer format: int64
<= 100
smsConsent
boolean
smsConsentText
string
<= 600 characters
smsConsentVersion
integer format: int64
defaultListIds
required
Array<string>
<= 50 items
doubleOptIn
required
boolean
fields
required
Array<object>
<= 20 items
object
key
required

Email, first_name, last_name, company or a custom field key

string
/^[a-z][a-z0-9_]{0,62}$/
label
required

Shown above the input; empty uses the field’s name

string
<= 80 characters
required
required
boolean
kind
required
string
Allowed values: embedded popup hosted
listChoice
required
boolean
listIds
required
Array<string>
<= 50 items
name
required
string
>= 1 characters <= 80 characters
publish
required
boolean
redirectUrl
required
string
<= 2000 characters
spam
required
object
blockDisposable
required
boolean
honeypot
required
boolean
minSeconds
required

Submissions faster than this look automated

integer format: int64
<= 60
rateLimitPerIp
required

Submissions per minute from one address

integer format: int64
>= 1 <= 120
turnstile
required
boolean

OK

Media typeapplication/json
object
afterSubmit
required
string
Allowed values: message redirect
allowedOrigins
required
Array<string>
blockedOrigins
required
Array<object>
object
count
required
integer format: int64
lastAt
required
string format: date-time
origin
required
string
consentText
required
string
consentVersion
required
integer format: int64
content
required
object
afterSubmitText
string
<= 300 characters
button
required
string
<= 40 characters
description
required
string
<= 500 characters
emailPlaceholder
required
string
<= 80 characters
footnote
required
string
<= 300 characters
heading
required
string
<= 120 characters
listsLabel
required
string
<= 80 characters
namePlaceholder
required
string
<= 80 characters
popupDelay
required

Seconds before a popup opens

integer format: int64
<= 600
popupRepeatDays
required

Days a closed popup stays closed

integer format: int64
<= 365
popupScroll
required

Percent of the page scrolled before a popup opens; 0 is off

integer format: int64
<= 100
smsConsent
boolean
smsConsentText
string
<= 600 characters
smsConsentVersion
integer format: int64
defaultListIds
required

Offered lists that start checked

Array<string>
doubleOptIn
required
boolean
fields
required
Array<object>
object
key
required

Email, first_name, last_name, company or a custom field key

string
/^[a-z][a-z0-9_]{0,62}$/
label
required

Shown above the input; empty uses the field’s name

string
<= 80 characters
required
required
boolean
hostedPage
required
boolean
hostedUrl
required
string
id
required
string
kind
required
string
Allowed values: embedded popup hosted push
listChoice
required

Visitors pick lists; off joins every offered list

boolean
listIds
required

Lists offered on the form

Array<string>
name
required
string
plainHtml
required
string
publicId
required
string
publishedAt
string format: date-time
redirectUrl
required
string
slug
required
string
spam
required
object
blockDisposable
required
boolean
honeypot
required
boolean
minSeconds
required

Submissions faster than this look automated

integer format: int64
<= 60
rateLimitPerIp
required

Submissions per minute from one address

integer format: int64
>= 1 <= 120
turnstile
required
boolean
stats
required
object
blocked
required

Submissions blocked as spam

integer format: int64
confirmed
required
integer format: int64
confirmedRate
required
number format: double
days
required
integer format: int64
pending
required

Double opt-in confirmations not clicked yet

integer format: int64
submissionRate
required
number format: double
submissions
required
integer format: int64
views
required
integer format: int64
status
required
string
Allowed values: draft live paused
updatedAt
required
string format: date-time
urls
required
object
hosted
required
string
script
required
string
scriptKb
required
integer format: int64
submit
required
string
waiting
required
integer format: int64

Example

{
"afterSubmit": "message",
"blockedOrigins": [
{
"origin": "staging.acme.io"
}
],
"kind": "embedded",
"publicId": "frm_8c2e1a",
"status": "draft"
}

Error

Media typeapplication/problem+json
object
code

Stable error code, e.g. permission_denied

string
detail

A human-readable explanation specific to this occurrence of the problem.

string
errors

Optional list of individual error details

Array<object>
object
location

Where the error occurred, e.g. ‘body.items[3].tags’ or ‘path.thing-id’

string
message

Error message text

string
value

The value at the given location

helpers

Members who hold the missing permission

Array<string>
instance

A URI reference that identifies the specific occurrence of the problem.

string format: uri
meta
object
key
additional properties
permission

The missing permission key

string
status

HTTP status code

integer format: int64
title

A short, human-readable summary of the problem type. This value should not change between occurrences of the error.

string
type

A URI reference to human-readable documentation for the error.

string format: uri
default: about:blank

Example

{
"detail": "Property foo is required but is missing.",
"instance": "https://example.com/error-log/abc123",
"status": 400,
"title": "Bad Request",
"type": "about:blank"
}