Unpublish a form
POST/v1/forms/{id}/unpublish
Requires an API key with the forms:write scope. About keys and scopes
Works with integration and partner keys, not agent keys.
Safe to retry: a repeat returns the current state, or 409 once it has moved on from it. About idempotency
Sets the form back to draft: its link and embeds stop taking submissions until it is published again. Its submissions and contacts stay. Unpublishing a draft returns it. Agent keys are refused with 403 AGENT_KEY_REFUSED.
Path parameters
idstringrequiredThe form's id.
uuid
Header parameters
Kirora-WorkspacestringoptionalPartner keys only: the child workspace to act in, by the external id the partner gave it. Without it, a partner key acts in its own workspace. Any other key that sends it is refused with 403, and an unknown workspace is 404.
pattern
^[A-Za-z0-9._:-]{1,128}$Idempotency-KeystringoptionalMakes a retry safe: a repeat with the same key and body within 24 hours gets the first response again, with
Idempotency-Replay: true. The same key with another request is 409IDEMPOTENCY_KEY_REUSED; while the first is still running, 409IDEMPOTENCY_KEY_IN_USE; after anunsafefirst request failed or never returned, 409IDEMPOTENCY_KEY_OUTCOME_UNKNOWN. Use a new key, such as a UUID, for each new request.8–255 characters
Returns
Returns 200 OK with a Form in data. It can also return 409 Conflict; see the statuses below. Otherwise returns an error; Errors lists every code and which to retry.
200 OKThe form, a draft again.409 ConflictThe request conflicts with current state — a duplicate unique value, or a resource whose status does not allow this operation.
idstringrequireduuid
publicIdstringrequiredThe id the public embed and hosted page use.
pattern
^[a-z0-9]{24}$slugstring | nullrequiredThe readable part of the form's link;
nullusespublicIdalone.namestringrequiredheadingstring | nullrequiredWhat visitors see above the fields;
nullshows none.introstring | nullrequiredA line or two under the heading;
nullshows none.locationstringrequiredWhere the form sits on your site, a label you choose (
website-footer,checkout-page). Recorded on each submission, asproperties.locationon itscontact.form_submittedevent and on theform.submittedwebhook, which is how a segment or journey uses it.urlstringrequiredThe hosted form's link, by its
slugwhen it has one, else itspublicId. It serves once the form is published.uri
statusstringrequiredWhether the form accepts submissions:
publishedoncePOST /v1/forms/{id}/publishputs it live,draftuntil then or after unpublishing.one of
draft,publishedlistIdstring | nullrequiredThe list every submitter is added to.
uuid
fieldsobject[]requiredThe fields, top to bottom.
6 child attributes
keystringrequiredWhere the response goes, such as
emailorattributes.plan.typestringrequiredThe input the visitor sees.
one of
email,text,textarea,select,checkbox,date,phonelabelstringrequiredThe text shown beside the field.
placeholderstringoptionalHint text shown inside the empty field.
requiredbooleanrequiredWhether the visitor must fill it in.
optionsobject[]optionalThe choices of a
selectorcheckboxfield.2 child attributes
valuestringrequiredlabelstringrequired
hiddenFieldsmap<string, object>requiredValues saved on each submitter with no field shown: fixed, or taken from the link.
at most 50 keys · keys: pattern
^[\p{L}\p{N}\p{M}_.-]{1,64}$One of 2 shapes
- With value
2 child attributes
source"fixed"requiredvaluestringrequiredSaved as it is on every submitter.
up to 1,000 characters
- With param
2 child attributes
source"link"requiredparamstringrequiredThe link parameter it takes its value from, such as
utm_campaign; left unset when the link has none.pattern
^[A-Za-z0-9_.-]{1,64}$
shareobject | nullrequiredHow the form's link previews, as set;
nullfalls back entirely.3 child attributes
titlestringoptionaldescriptionstringoptionalimageUrlstringoptionaluri
acceptingSubmissionsbooleanrequiredfalse: closed by hand, whatever its closing time and limit.closesAtstring | nullrequiredWhen the form closes, if ever.
date-time
maxSubmissionsinteger | nullrequiredThe submissions it closes at, if any.
closedMessagestring | nullrequiredWhat a closed form shows;
nullshows the default wording.submissionCountintegerrequiredSubmissions taken so far (honeypot catches aside), counted for the limit.
min 0
allowedOriginsstring[]requiredSite origins the embed may load from.
refusedOriginsobject[]requiredOrigins an embed was refused from lately, newest first, not counting any since added to
allowedOrigins; add one there to approve it.2 child attributes
originstringrequiredThe origin that was refused.
lastRefusedAtstringrequiredWhen it was last refused.
date-time
doubleOptInbooleanrequiredWhether submitters must confirm by email before they are subscribed.
notifyUserIdsstring[]requiredUsers of this workspace told about each submission.
themeFormThemerequired12 child attributes
modestringoptionalLight or dark defaults for every colour left unset; light when unset.
one of
light,darkaccentColorstringoptionalColour of the button and focus outlines, as
#RRGGBB.pattern
^#[0-9a-fA-F]{6}$backgroundColorstring | nulloptionalThe page and form background, as
#RRGGBB; unset ornullfor the mode's default.pattern
^#[0-9a-fA-F]{6}$textColorstring | nulloptionalHeadings, labels and text, as
#RRGGBB; unset ornullfor the mode's default.pattern
^#[0-9a-fA-F]{6}$buttonColorstring | nulloptionalThe button's fill; unset, the accent colour, as
#RRGGBB; unset ornullfor the mode's default.pattern
^#[0-9a-fA-F]{6}$buttonTextColorstring | nulloptionalThe button's text, as
#RRGGBB; unset ornullfor the mode's default.pattern
^#[0-9a-fA-F]{6}$fontFamilystringoptionalThe font's id: a generic style (
system,sans,serif,mono) or a named font the forms host serves itself. A font emails also offer has the same id there (EmailFont).one of
system,sans,serif,mono,inter,roboto,open-sans,lato,montserrat,poppins,source-sans-3,nunito,raleway,work-sans,dm-sans,manrope,ibm-plex-sans,noto-sans,rubik,karla,merriweather,lora,playfair-display,libre-baskerville,source-serif-4,eb-garamond,ibm-plex-mono,jetbrains-monoborderRadiusintegeroptionalCorner rounding of inputs and the button, in px, where
inputs.borderRadiusorbutton.borderRadiusdoes not set its own.min 0 · max 24
buttonLabelstringoptionalText on the submit button.
1–40 characters
inputsobjectoptionalHow fields look; each part optional.
9 child attributes
widthstringoptionalfit(unset): a short answer's field is 320px and a long one fills the form;full: every field fills the form;fixed: every fieldwidthPxwide at most.one of
fit,full,fixedwidthPxintegeroptionalWith
widthfixed: the width, in px.min 200 · max 720
heightintegeroptionalIn px.
min 28 · max 64
backgroundColorstring | nulloptionalThe field background, as
#RRGGBB; unset ornullfor the mode's default.pattern
^#[0-9a-fA-F]{6}$placeholderColorstring | nulloptionalPlaceholder text, as
#RRGGBB; unset ornullfor the mode's default.pattern
^#[0-9a-fA-F]{6}$borderColorstring | nulloptionalThe field border, as
#RRGGBB; unset ornullfor the mode's default.pattern
^#[0-9a-fA-F]{6}$borderWidthintegeroptionalIn px.
min 0 · max 4
borderRadiusintegeroptionalIn px; unset, the top-level
borderRadius.min 0 · max 32
spacingintegeroptionalThe gap below each field, in px.
min 0 · max 48
buttonobjectoptionalHow the submit button looks; each part optional.
5 child attributes
widthstringoptionalFit its label, or the form width.
one of
auto,fullheightintegeroptionalIn px.
min 28 · max 64
alignstringoptionalone of
start,center,endfontSizeintegeroptionalIn px.
min 12 · max 24
borderRadiusintegeroptionalIn px; unset, the top-level
borderRadius.min 0 · max 32
layoutobjectoptional2 child attributes
pageWidthintegeroptionalThe form's widest, in px.
min 360 · max 960
baseFontSizeintegeroptionalBody text size, in px.
min 12 · max 20
displayobjectrequiredOne of 2 shapes
- Inline
1 child attribute
mode"inline"required
- Popup
7 child attributes
mode"popup"requireddelayDurationOrZerooptionalHow long after the page loads it opens, at most 10 minutes. Defaults to 5 seconds.
2 child attributes
valueintegerrequiredmin 0
unitstringrequiredone of
seconds,minutes,hours,days
scrollPercentintegeroptionalOpens once the visitor has scrolled this far down the page.
min 1 · max 100
exitIntentbooleanoptionalOpens when the visitor moves to leave the page (desktop only).
urlMatchobjectoptionalLimits which pages the popup opens on.
2 child attributes
containsstring[]optionalShow only on pages whose URL contains one of these.
at most 20 items
excludesstring[]optionalNever show on pages whose URL contains one of these.
at most 20 items
hideForDurationOrZerooptionalHow long it stays away once closed, at most 365 days. Defaults to 7 days.
2 child attributes
valueintegerrequiredmin 0
unitstringrequiredone of
seconds,minutes,hours,days
hideAfterSubmitbooleanoptionalWhether it stays away after a signup. Defaults to true.
captchaobject | nullrequiredWhere the CAPTCHA comes from;
nullwhile it is off. Secrets never show.One of 2 shapes
- KiroraCaptchaSetting
1 child attribute
mode"kirora"required
- OwnCaptchaSetting
2 child attributes
mode"own"requiredsiteKeystringrequired
consentobjectrequired2 child attributes
requiredtruerequiredAlways
true: the visitor must tick the consent box.labelstringrequiredThe consent text shown beside the box.
successobjectrequiredOne of 2 shapes
- Show a message
2 child attributes
type"message"requiredmessagestringrequiredShown in place of the form.
- Redirect
2 child attributes
type"redirect"requiredredirectUrlstringrequiredAn http(s) address the visitor is sent to.
uri
archivedAtstring | nullrequiredWhen it was archived; an archived form is left out of the list and stops serving.
date-time
createdAtstringrequireddate-time
updatedAtstringrequireddate-time
Headers on 200 OK
Idempotency-Replaystringoptionaltruewhen this is the stored response to an earlier request with the same key.one of
true