Update a form. Provided keys are changed; field_schema/settings/appearance are fully replaced when present. When the form ends up published, the new content is published as a new version.
Update a form. Provided keys are changed; field_schema/settings/appearance are fully replaced when present. When the form ends up published, the new content is published as a new version.
https://app.softsolz.uk/api/v1/services/forms/forms/{id}Recent Requests
Kept only in this browserPath Params
idstringrequiredHeaders
AuthorizationstringrequiredBearer token: `Bearer sk_live_...` (or `sk_test_...` for sandbox). A login token will not work here.
Idempotency-KeystringOptional idempotency key for safe retries.
Body Params
namestringForm name (required, trimmed).
slugstringOptional slug; normalised to lowercase letters/digits/hyphens. Defaults to a slugified name. Unique per tenant.
descriptionstringOptional description (truncated to 1000 chars).
statusstringPublish status; defaults to draft. Only published forms accept submissions.
field_schemaarray of objectsField definitions. Each item: { id, type, label, required?, width?, page?, help_text?, options?, accept?, max_size_mb?, ...type-specific keys }. Answer types: text, email, tel, url, number, textarea, select, radio, checkbox, checkbox_group, date, file, time, datetime, multi_select, yes_no, rating, scale, slider, likert, signature, address, country, consent, hidden, calculated. Layout items: heading, paragraph, divider, image, section.
settingsobjectForm settings; only known keys are persisted (success_message, redirect_url, submit_button_label, notify_in_app, honeypot_enabled, max_submissions_per_day, etc.).
appearanceobjectAppearance tokens (accent_color, theme, font_family, button_style, etc.).
pagesarray of objectsOptional page titles for a multi-step form: { id, title?, description? }.
logicarray of objectsOptional rules. Rules that point at unknown fields or pages are dropped when saved.
expected_updated_atstringOptimistic-concurrency guard; if it does not equal the stored updated_at the call returns 409 STALE_VERSION.
Response
Response Body
idintegerForm id.slugstringURL-safe form slug, unique per tenant.namestringForm display name.descriptionstring | nullOptional form description.field_schemaarray of objectsOrdered field definitions. Each item: { id, type, label, required, width, ...type-specific keys }.settingsobjectForm settings (success_message, notify_in_app, honeypot_enabled, etc.).appearanceobjectAppearance tokens (colors, theme, font).statusstringPublish status.created_atstringCreation timestamp.updated_atstringLast update timestamp. Round-trip as expected_updated_at to guard against stale writes.submissions_countintegerTotal submissions for this form.unread_countintegerUnread submissions.pagesarray of objectsPage titles for a multi-step form, in order: { id, title?, description? }.logicarray of objectsRules: { id, when: { match, rules: [{ field, operator, value }] }, then: [{ action, target?, value? }] }.logic_engineinteger1 for forms that only use visible_if, 2 for forms with rules or pages.published_atstring | nullWhen the live version was last published.has_unpublished_changesbooleanTrue when the working copy differs from the published version.archived_atstring | nullWhen the form was archived; null when it is not.share_enabledbooleanWhether the share link is on.version_idinteger | nullOnly with view=published: the published version id.Request
curl --request PATCH \ --url https://app.softsolz.uk/api/v1/services/forms/forms/{id} \ --header 'Authorization: Bearer sk_live_your_key' \ --header 'Content-Type: application/json' \ --data '{ "name": "Contact Us", "slug": "contact-us", "description": "Reach our sales team.", "status": "published", "field_schema": [ { "id": "full_name", "type": "text", "label": "Full name", "required": true } ], "settings": { "success_message": "Thanks, we got it!", "notify_in_app": true }, "appearance": { "accent_color": "#2563eb", "theme": "light" }, "pages": [ { "id": "about_you", "title": "About you" } ], "logic": []}'Credentials
Sent as a Bearer token and used in the samples above and in Try it. Kept only in this browser tab until you close it. Use an sk_test_ key to stay in your sandbox.
Response · 200
{ "data": { "id": 42, "slug": "contact-us", "name": "Contact Us", "description": "Reach our sales team.", "field_schema": [ { "id": "full_name", "type": "text", "label": "Full name", "required": true } ], "settings": { "success_message": "Thanks!", "notify_in_app": true }, "appearance": { "accent_color": "#2563eb", "theme": "light" }, "status": "published", "created_at": "2026-06-01T12:00:00.000Z", "updated_at": "2026-06-02T09:30:00.000Z", "submissions_count": 128, "unread_count": 4, "pages": [ { "id": "about_you", "title": "About you" } ], "logic": [], "logic_engine": 1, "published_at": "2026-06-02T09:30:00.000Z", "has_unpublished_changes": false, "archived_at": null, "share_enabled": false, "version_id": 3 }}