{"openapi":"3.1.0","info":{"title":"Onlyform Public API","version":"2026-08-01","summary":"Programmatic access to Onlyform workspaces, forms, submissions, analytics, and webhooks.","description":"The Onlyform Public API uses stable resource IDs, cursor pagination, scoped API keys, and structured errors. API keys are created in the Onlyform profile and must be sent in the X-API-Key header. Keys are shown once and cannot be recovered."},"servers":[{"url":"https://api.onlyform.com","description":"Production"}],"security":[{"ApiKey":[]}],"tags":[{"name":"Identity","description":"Inspect the API key owner and effective scopes."},{"name":"Workspaces","description":"List and manage accessible workspaces."},{"name":"Forms","description":"Create and manage forms and their block definitions."},{"name":"Submissions","description":"Read and remove completed form submissions."},{"name":"Analytics","description":"Read aggregate form funnel metrics."},{"name":"Webhooks","description":"Manage response-completed webhooks and inspect deliveries."}],"paths":{"/v1/openapi.json":{"get":{"tags":["Identity"],"operationId":"getOpenApiDocument","summary":"Get the OpenAPI document","security":[],"responses":{"200":{"description":"The current OpenAPI document.","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/v1/me":{"get":{"tags":["Identity"],"operationId":"getCurrentUser","summary":"Get the API key owner","responses":{"200":{"description":"Authenticated account and effective key scopes.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CurrentUser"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/v1/workspaces":{"get":{"tags":["Workspaces"],"operationId":"listWorkspaces","summary":"List workspaces","description":"Requires workspaces:read.","parameters":[{"$ref":"#/components/parameters/Limit"},{"$ref":"#/components/parameters/Cursor"}],"responses":{"200":{"description":"A page of accessible workspaces.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspacePage"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}}},"post":{"tags":["Workspaces"],"operationId":"createWorkspace","summary":"Create a workspace","description":"Requires workspaces:write.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceWrite"}}}},"responses":{"201":{"description":"Workspace created.","headers":{"Location":{"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workspace"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"409":{"$ref":"#/components/responses/Conflict"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/v1/workspaces/{workspaceId}":{"parameters":[{"$ref":"#/components/parameters/WorkspaceId"}],"get":{"tags":["Workspaces"],"operationId":"getWorkspace","summary":"Get a workspace","description":"Requires workspaces:read.","responses":{"200":{"description":"Workspace details.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workspace"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"}}},"patch":{"tags":["Workspaces"],"operationId":"updateWorkspace","summary":"Update a workspace","description":"Requires workspaces:write and workspace owner access.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceWrite"}}}},"responses":{"200":{"description":"Updated workspace.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workspace"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}},"delete":{"tags":["Workspaces"],"operationId":"deleteWorkspace","summary":"Delete a workspace","description":"Requires workspaces:write and workspace owner access. Forms in the workspace are moved to trash.","responses":{"204":{"description":"Workspace deleted."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/v1/forms":{"get":{"tags":["Forms"],"operationId":"listForms","summary":"List forms","description":"Requires forms:read.","parameters":[{"$ref":"#/components/parameters/Limit"},{"$ref":"#/components/parameters/Cursor"},{"name":"workspace_id","in":"query","description":"Only return forms from this accessible workspace.","schema":{"$ref":"#/components/schemas/ObjectId"}}],"responses":{"200":{"description":"A page of forms.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FormPage"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"}}},"post":{"tags":["Forms"],"operationId":"createForm","summary":"Create a form","description":"Creates a draft form. Include definition.blocks, definition.settings, and definition.theme to create a complete form in one request. Requires forms:write.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FormCreate"}}}},"responses":{"201":{"description":"Form created.","headers":{"Location":{"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Form"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/v1/forms/{formId}":{"parameters":[{"$ref":"#/components/parameters/FormId"}],"get":{"tags":["Forms"],"operationId":"getForm","summary":"Get a form","description":"Requires forms:read.","responses":{"200":{"description":"Form and editable definition.","headers":{"ETag":{"description":"Current form revision token for conditional updates.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Form"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"}}},"patch":{"tags":["Forms"],"operationId":"updateForm","summary":"Update a form","description":"Replaces provided definition sections and preserves omitted sections. Requires forms:write. Send If-Match with the ETag from GET to prevent lost updates.","parameters":[{"name":"If-Match","in":"header","required":false,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FormUpdate"}}}},"responses":{"200":{"description":"Updated form.","headers":{"ETag":{"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Form"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"412":{"$ref":"#/components/responses/PreconditionFailed"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}},"delete":{"tags":["Forms"],"operationId":"deleteForm","summary":"Move a form to trash","description":"Requires forms:write.","responses":{"204":{"description":"Form moved to trash."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/v1/forms/{formId}/questions":{"parameters":[{"$ref":"#/components/parameters/FormId"}],"get":{"tags":["Forms"],"operationId":"listFormQuestions","summary":"List form blocks","description":"Returns the ordered top-level blocks. Requires forms:read.","responses":{"200":{"description":"Ordered blocks.","content":{"application/json":{"schema":{"type":"object","required":["items"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Block"}}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/v1/forms/{formId}/submissions":{"parameters":[{"$ref":"#/components/parameters/FormId"}],"get":{"tags":["Submissions"],"operationId":"listFormSubmissions","summary":"List form submissions","description":"Requires submissions:read.","parameters":[{"$ref":"#/components/parameters/Limit"},{"$ref":"#/components/parameters/Cursor"},{"name":"since","in":"query","description":"Include submissions at or after this timestamp.","schema":{"type":"string","format":"date-time"}},{"name":"until","in":"query","description":"Include submissions at or before this timestamp.","schema":{"type":"string","format":"date-time"}}],"responses":{"200":{"description":"A page of completed submissions.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubmissionPage"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/v1/forms/{formId}/submissions/{submissionId}":{"parameters":[{"$ref":"#/components/parameters/FormId"},{"$ref":"#/components/parameters/SubmissionId"}],"get":{"tags":["Submissions"],"operationId":"getFormSubmission","summary":"Get a submission","description":"Requires submissions:read.","responses":{"200":{"description":"Submission details.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Submission"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"}}},"delete":{"tags":["Submissions"],"operationId":"deleteFormSubmission","summary":"Delete a submission","description":"Permanently deletes one response. Requires submissions:write.","responses":{"204":{"description":"Submission deleted."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/v1/forms/{formId}/analytics/metrics":{"parameters":[{"$ref":"#/components/parameters/FormId"}],"get":{"tags":["Analytics"],"operationId":"getFormAnalyticsMetrics","summary":"Get form funnel metrics","description":"Requires analytics:read.","parameters":[{"name":"period","in":"query","schema":{"type":"string","enum":["today","yesterday","24h","7d","30d","3m","6m","12m","all"],"default":"30d"}}],"responses":{"200":{"description":"Aggregate funnel metrics.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnalyticsMetrics"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/v1/webhooks":{"get":{"tags":["Webhooks"],"operationId":"listWebhooks","summary":"List webhooks","description":"Requires webhooks:read.","responses":{"200":{"description":"All webhooks for accessible forms.","content":{"application/json":{"schema":{"type":"object","required":["items"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Webhook"}}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}}},"post":{"tags":["Webhooks"],"operationId":"createWebhook","summary":"Create a webhook","description":"Onlyform validates the destination against private and reserved networks. Requires webhooks:write.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookCreate"}}}},"responses":{"201":{"description":"Webhook created.","headers":{"Location":{"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Webhook"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/v1/webhooks/{webhookId}":{"parameters":[{"$ref":"#/components/parameters/WebhookId"}],"get":{"tags":["Webhooks"],"operationId":"getWebhook","summary":"Get a webhook","description":"Requires webhooks:read.","responses":{"200":{"description":"Webhook details. Signing secrets are never returned.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Webhook"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"}}},"patch":{"tags":["Webhooks"],"operationId":"updateWebhook","summary":"Update a webhook","description":"Requires webhooks:write.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookUpdate"}}}},"responses":{"200":{"description":"Updated webhook.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Webhook"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}},"delete":{"tags":["Webhooks"],"operationId":"deleteWebhook","summary":"Delete a webhook","description":"Requires webhooks:write.","responses":{"204":{"description":"Webhook deleted."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/v1/webhooks/{webhookId}/deliveries":{"parameters":[{"$ref":"#/components/parameters/WebhookId"}],"get":{"tags":["Webhooks"],"operationId":"listWebhookDeliveries","summary":"List webhook deliveries","description":"Returns up to 100 most recent redacted delivery summaries. Requires webhooks:read.","responses":{"200":{"description":"Recent delivery summaries.","content":{"application/json":{"schema":{"type":"object","required":["items"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/WebhookDelivery"}}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/v1/forms/{formId}/blocks":{"parameters":[{"$ref":"#/components/parameters/FormId"}],"get":{"tags":["Forms"],"operationId":"listFormBlocks","summary":"List form blocks","description":"Returns the complete ordered top-level block collection. Requires forms:read.","responses":{"200":{"description":"Ordered block collection.","headers":{"ETag":{"description":"Current form revision token.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockCollection"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"}}},"post":{"tags":["Forms"],"operationId":"createFormBlock","summary":"Add a form block","description":"Adds a top-level question or content block at an optional position. Nested blocks belong in the parent group children array. Requires forms:write.","parameters":[{"$ref":"#/components/parameters/IfMatch"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockCreateRequest"}}}},"responses":{"201":{"description":"Block created.","headers":{"Location":{"schema":{"type":"string"}},"ETag":{"description":"Current form revision token.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Block"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"412":{"$ref":"#/components/responses/PreconditionFailed"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}},"put":{"tags":["Forms"],"operationId":"replaceFormBlocks","summary":"Replace or reorder form blocks","description":"Replaces the complete ordered top-level block collection. Use this operation for bulk edits and reordering. Requires forms:write.","parameters":[{"$ref":"#/components/parameters/IfMatch"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockCollectionReplaceRequest"}}}},"responses":{"200":{"description":"Updated block collection.","headers":{"ETag":{"description":"Current form revision token.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockCollection"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"412":{"$ref":"#/components/responses/PreconditionFailed"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/v1/forms/{formId}/blocks/{blockId}":{"parameters":[{"$ref":"#/components/parameters/FormId"},{"$ref":"#/components/parameters/BlockId"}],"get":{"tags":["Forms"],"operationId":"getFormBlock","summary":"Get a form block","description":"Returns one top-level question or content block. Requires forms:read.","responses":{"200":{"description":"Block details.","headers":{"ETag":{"description":"Current form revision token.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Block"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"}}},"put":{"tags":["Forms"],"operationId":"replaceFormBlock","summary":"Replace or move a form block","description":"Fully replaces one top-level block and optionally moves it in the same atomic request. The replacement ID must match blockId. Requires forms:write.","parameters":[{"$ref":"#/components/parameters/IfMatch"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockReplaceRequest"}}}},"responses":{"200":{"description":"Updated block.","headers":{"ETag":{"description":"Current form revision token.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Block"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"412":{"$ref":"#/components/responses/PreconditionFailed"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}},"delete":{"tags":["Forms"],"operationId":"deleteFormBlock","summary":"Delete a form block","description":"Deletes one top-level question or content block. Requires forms:write.","parameters":[{"$ref":"#/components/parameters/IfMatch"}],"responses":{"204":{"description":"Block deleted.","headers":{"ETag":{"description":"Current form revision token.","schema":{"type":"string"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"412":{"$ref":"#/components/responses/PreconditionFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}}},"components":{"securitySchemes":{"ApiKey":{"type":"apiKey","in":"header","name":"X-API-Key","description":"A scoped key with the of_live_ prefix, generated from Profile > API keys."}},"parameters":{"Limit":{"name":"limit","in":"query","description":"Number of records to return.","schema":{"type":"integer","minimum":1,"maximum":100,"default":20}},"Cursor":{"name":"cursor","in":"query","description":"Opaque next_cursor value from the previous page.","schema":{"type":"string"}},"WorkspaceId":{"name":"workspaceId","in":"path","required":true,"schema":{"$ref":"#/components/schemas/ObjectId"}},"FormId":{"name":"formId","in":"path","required":true,"schema":{"$ref":"#/components/schemas/ObjectId"}},"SubmissionId":{"name":"submissionId","in":"path","required":true,"schema":{"$ref":"#/components/schemas/ObjectId"}},"WebhookId":{"name":"webhookId","in":"path","required":true,"schema":{"$ref":"#/components/schemas/ObjectId"}},"BlockId":{"name":"blockId","in":"path","required":true,"description":"Stable caller-supplied ID of a top-level block.","schema":{"type":"string","minLength":1,"maxLength":200}},"IfMatch":{"name":"If-Match","in":"header","required":false,"description":"ETag returned by a form or block read. Prevents overwriting a newer form revision.","schema":{"type":"string"}}},"responses":{"Unauthorized":{"description":"Missing, invalid, expired, or revoked API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Forbidden":{"description":"The key lacks the required scope.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"NotFound":{"description":"The resource does not exist or is not accessible.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Conflict":{"description":"The request conflicts with current state.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"PreconditionFailed":{"description":"The If-Match value does not match the current form revision.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"ValidationFailed":{"description":"The request body or query is invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"RateLimited":{"description":"The key exceeded 100 requests in one minute.","headers":{"Retry-After":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"schemas":{"ObjectId":{"type":"string","pattern":"^[0-9a-fA-F]{24}$","examples":["507f1f77bcf86cd799439011"]},"Scope":{"type":"string","enum":["analytics:read","forms:read","forms:write","submissions:read","submissions:write","webhooks:read","webhooks:write","workspaces:read","workspaces:write"]},"CurrentUser":{"type":"object","required":["id","name","email","scopes"],"properties":{"id":{"$ref":"#/components/schemas/ObjectId"},"name":{"type":"string"},"email":{"type":"string","format":"email"},"scopes":{"type":"array","items":{"$ref":"#/components/schemas/Scope"}}}},"PageInfo":{"type":"object","required":["has_more","next_cursor"],"properties":{"has_more":{"type":"boolean"},"next_cursor":{"type":["string","null"]}}},"Workspace":{"type":"object","required":["id","public_id","name","created_at","updated_at"],"properties":{"id":{"$ref":"#/components/schemas/ObjectId"},"public_id":{"type":"string"},"name":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}}},"WorkspaceWrite":{"type":"object","required":["name"],"additionalProperties":false,"properties":{"name":{"type":"string","minLength":1,"maxLength":120}}},"WorkspacePage":{"type":"object","required":["items","page"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Workspace"}},"page":{"$ref":"#/components/schemas/PageInfo"}}},"FormStatus":{"type":"string","enum":["draft","published","deleted"]},"FormSummary":{"type":"object","required":["id","public_id","workspace_id","name","status","is_closed","created_at","updated_at","links","type"],"properties":{"id":{"$ref":"#/components/schemas/ObjectId"},"public_id":{"type":"string"},"workspace_id":{"$ref":"#/components/schemas/ObjectId"},"name":{"type":"string"},"status":{"$ref":"#/components/schemas/FormStatus"},"is_closed":{"type":"boolean"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"links":{"type":"object","required":["self","submissions"],"properties":{"self":{"type":"string"},"submissions":{"type":"string"}}},"type":{"$ref":"#/components/schemas/FormType"}}},"Form":{"allOf":[{"$ref":"#/components/schemas/FormSummary"},{"type":"object","required":["definition"],"properties":{"definition":{"$ref":"#/components/schemas/FormDefinition"}}}]},"FormPage":{"type":"object","required":["items","page"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/FormSummary"}},"page":{"$ref":"#/components/schemas/PageInfo"}}},"FormCreate":{"type":"object","required":["name","workspace_id","type"],"additionalProperties":false,"properties":{"name":{"type":"string","minLength":1,"maxLength":120},"workspace_id":{"$ref":"#/components/schemas/ObjectId"},"category_id":{"$ref":"#/components/schemas/ObjectId","description":"Optional internal category. When omitted, Onlyform uses the default category."},"type":{"$ref":"#/components/schemas/FormType"},"definition":{"$ref":"#/components/schemas/FormDefinitionUpdate"}},"examples":[{"name":"Contact us","workspace_id":"507f1f77bcf86cd799439012","type":"MULTI","definition":{"blocks":[{"id":"name","type":"short-text","label":"Full name","description":"Enter your full name.","required":true,"properties":{"maxChars":100}},{"id":"email","type":"email","label":"Email address","description":"We will use this address to reply.","required":true,"properties":{}},{"id":"ending","type":"ending","label":"Thank you","description":"We will be in touch soon.","required":false,"properties":{"buttonText":"Submit"}}],"settings":{"branding":true,"navigation":true,"progressBar":true,"closed":false},"theme":{"font":"Inter","corners":0,"colors":{"primary":"#3969D9","primaryForeground":"#FFFFFF","background":"#FFFFFF","text":"#0A0A0A"}}}}]},"FormUpdate":{"type":"object","minProperties":1,"additionalProperties":false,"properties":{"name":{"type":"string","minLength":1,"maxLength":120},"definition":{"$ref":"#/components/schemas/FormDefinitionUpdate"}}},"FormDefinition":{"type":"object","required":["blocks","settings","theme"],"properties":{"blocks":{"type":"array","items":{"$ref":"#/components/schemas/Block"}},"settings":{"$ref":"#/components/schemas/FormSettings"},"theme":{"$ref":"#/components/schemas/CustomTheme"}}},"FormDefinitionUpdate":{"type":"object","minProperties":1,"additionalProperties":false,"properties":{"blocks":{"type":"array","description":"Complete ordered top-level block collection. When supplied, it replaces the current collection.","items":{"$ref":"#/components/schemas/Block"}},"settings":{"$ref":"#/components/schemas/FormSettings"},"theme":{"$ref":"#/components/schemas/CustomTheme"}}},"BlockType":{"type":"string","enum":["welcome","ending","date","file-upload","phone-number","email","website","payment","statement","group","short-text","long-text","ranking","opinion-scale","rating","matrix","number","multiple-choice","picture-choice","yes-no","dropdown","legal","address","contact-info","time","color","currency","slider","gate","signature","coordinates","captcha","video","pdf","text","divider","label","heading-1","heading-2","heading-3","page-break","logic","hidden-field","image","audio","checkboxes"]},"Choice":{"type":"object","required":["id","label"],"properties":{"id":{"type":"string"},"label":{"type":"string"},"image":{},"color":{"type":"string","description":"Optional CSS color associated with the choice."},"row_id":{"type":"string","description":"Optional row grouping identifier."},"alt":{"type":"string","description":"Alternative text for a picture choice."}}},"Block":{"type":"object","required":["id","type","label","description","required","properties"],"properties":{"id":{"type":"string","description":"Stable caller-supplied block ID."},"type":{"$ref":"#/components/schemas/BlockType"},"label":{"type":"string"},"description":{"type":"string"},"required":{"type":"boolean"},"part_of":{"type":"string"},"row_id":{"type":"string"},"choices":{"type":"array","items":{"$ref":"#/components/schemas/Choice"}},"children":{"type":"array","items":{"$ref":"#/components/schemas/Block"}},"properties":{"$ref":"#/components/schemas/BlockProperties"},"matrix_columns":{"type":"array","items":{"$ref":"#/components/schemas/Choice"}},"matrix_rows":{"type":"array","items":{"$ref":"#/components/schemas/Choice"}}}},"Submission":{"type":"object","required":["id","form_id","status","submitted_at","metadata","answers"],"properties":{"id":{"$ref":"#/components/schemas/ObjectId"},"form_id":{"$ref":"#/components/schemas/ObjectId"},"status":{"type":"string","const":"completed"},"submitted_at":{"type":"string","format":"date-time"},"completion_time":{"type":["number","null"]},"metadata":{"type":"object","required":["country","device","user_agent","utm"],"properties":{"country":{"type":["string","null"]},"device":{"type":["string","null"]},"user_agent":{"type":["string","null"]},"utm":{"type":"object","additionalProperties":true}}},"answers":{"type":"array","items":{"$ref":"#/components/schemas/Answer"}}}},"Answer":{"type":"object","required":["field","value"],"properties":{"field":{"type":"object","required":["id","type","label"],"properties":{"id":{"type":"string"},"type":{"type":"string"},"label":{"type":"string"}}},"value":{}}},"SubmissionPage":{"type":"object","required":["items","page"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Submission"}},"page":{"$ref":"#/components/schemas/PageInfo"}}},"AnalyticsMetrics":{"type":"object","required":["period","estimated","views","starts","submissions","completion_rate"],"properties":{"period":{"type":"string"},"estimated":{"type":"boolean","description":"True when legacy lifetime counters were used because event-level data is unavailable."},"views":{"type":"integer","minimum":0},"starts":{"type":"integer","minimum":0},"submissions":{"type":"integer","minimum":0},"completion_rate":{"type":"number","minimum":0}}},"Webhook":{"type":"object","required":["id","form_id","url","enabled","event_types","has_secret","created_at","updated_at"],"properties":{"id":{"$ref":"#/components/schemas/ObjectId"},"form_id":{"$ref":"#/components/schemas/ObjectId"},"url":{"type":"string","format":"uri"},"enabled":{"type":"boolean"},"event_types":{"type":"array","items":{"type":"string","const":"form.response.completed"}},"has_secret":{"type":"boolean"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}}},"WebhookCreate":{"type":"object","required":["form_id","url"],"additionalProperties":false,"properties":{"form_id":{"$ref":"#/components/schemas/ObjectId"},"url":{"type":"string","format":"uri"},"enabled":{"type":"boolean","default":true},"signing_secret":{"type":"string","minLength":16,"writeOnly":true}}},"WebhookUpdate":{"type":"object","minProperties":1,"additionalProperties":false,"properties":{"url":{"type":"string","format":"uri"},"enabled":{"type":"boolean"},"signing_secret":{"type":"string","minLength":16,"writeOnly":true}}},"WebhookDelivery":{"type":"object","required":["id","webhook_id","status","type","delivered_at"],"properties":{"id":{"type":"string"},"webhook_id":{"$ref":"#/components/schemas/ObjectId"},"status":{"type":"integer"},"type":{"type":"string","enum":["test","live"]},"delivered_at":{"type":["string","null"],"format":"date-time"}}},"ErrorDetail":{"type":"object","additionalProperties":true},"Error":{"type":"object","required":["type","code","message","status","request_id"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"status":{"type":"integer"},"request_id":{"type":"string"},"details":{"type":"array","items":{"$ref":"#/components/schemas/ErrorDetail"}}}},"UtmSettings":{"type":"object","additionalProperties":false,"properties":{"campaign":{"type":"boolean","description":"Capture utm_campaign."},"content":{"type":"boolean","description":"Capture utm_content."},"medium":{"type":"boolean","description":"Capture utm_medium."},"source":{"type":"boolean","description":"Capture utm_source."},"term":{"type":"boolean","description":"Capture utm_term."}}},"FormSettings":{"type":"object","description":"Form behavior stored in the backend settings object. Unknown supported product settings are preserved.","additionalProperties":true,"properties":{"branding":{"type":"boolean","description":"Show Onlyform branding."},"navigation":{"type":"boolean","description":"Show form navigation controls."},"progressBar":{"type":"boolean","description":"Show form progress."},"singlePage":{"type":"boolean","readOnly":true,"description":"Derived from the top-level form type. Use type instead of writing this compatibility field."},"inlineFields":{"type":"boolean","description":"Allow compatible fields to render inline."},"borderRadius":{"type":"number","description":"Legacy form corner radius setting."},"numberedQuestions":{"type":"boolean","description":"Prefix questions with numbers."},"responseLimit":{"type":"integer","minimum":-1,"description":"Maximum responses; -1 means unlimited."},"darkMode":{"type":"boolean","description":"Use the dark theme palette."},"closed":{"type":"boolean","description":"Stop accepting new responses."},"utm":{"$ref":"#/components/schemas/UtmSettings"},"showTitle":{"type":"boolean","description":"Show the form title."},"closeAt":{"type":["string","null"],"format":"date-time","description":"Automatically close the form at this time."},"closedMessage":{"type":"string","description":"Message shown when the form is closed."},"duplicateField":{"type":["string","null"],"description":"Block ID used to reject duplicate responses."},"redirectUrl":{"type":"string","format":"uri","description":"Redirect after completion. Pro."},"submitLabel":{"type":"string","description":"Custom submit button label."},"cover":{"type":"object","additionalProperties":false,"properties":{"color":{"type":"string","description":"CSS fallback color."},"image":{"$ref":"#/components/schemas/ThemeAsset"},"position":{"type":"object","additionalProperties":false,"properties":{"x":{"type":"number"},"y":{"type":"number"}}}}}}},"ThemePalette":{"type":"object","additionalProperties":{"type":"string"},"properties":{"background":{"type":"string","description":"CSS color for background.","examples":["#3969D9"]},"foreground":{"type":"string","description":"CSS color for foreground.","examples":["#3969D9"]},"card":{"type":"string","description":"CSS color for card.","examples":["#3969D9"]},"cardForeground":{"type":"string","description":"CSS color for cardForeground.","examples":["#3969D9"]},"popover":{"type":"string","description":"CSS color for popover.","examples":["#3969D9"]},"popoverForeground":{"type":"string","description":"CSS color for popoverForeground.","examples":["#3969D9"]},"primary":{"type":"string","description":"CSS color for primary.","examples":["#3969D9"]},"primaryForeground":{"type":"string","description":"CSS color for primaryForeground.","examples":["#3969D9"]},"secondary":{"type":"string","description":"CSS color for secondary.","examples":["#3969D9"]},"secondaryForeground":{"type":"string","description":"CSS color for secondaryForeground.","examples":["#3969D9"]},"muted":{"type":"string","description":"CSS color for muted.","examples":["#3969D9"]},"mutedForeground":{"type":"string","description":"CSS color for mutedForeground.","examples":["#3969D9"]},"accent":{"type":"string","description":"CSS color for accent.","examples":["#3969D9"]},"accentForeground":{"type":"string","description":"CSS color for accentForeground.","examples":["#3969D9"]},"destructive":{"type":"string","description":"CSS color for destructive.","examples":["#3969D9"]},"destructiveForeground":{"type":"string","description":"CSS color for destructiveForeground.","examples":["#3969D9"]},"border":{"type":"string","description":"CSS color for border.","examples":["#3969D9"]},"input":{"type":"string","description":"CSS color for input.","examples":["#3969D9"]},"ring":{"type":"string","description":"CSS color for ring.","examples":["#3969D9"]},"text":{"type":"string","description":"CSS color for text.","examples":["#3969D9"]},"chart1":{"type":"string","description":"CSS color for chart1.","examples":["#3969D9"]},"chart2":{"type":"string","description":"CSS color for chart2.","examples":["#3969D9"]},"chart3":{"type":"string","description":"CSS color for chart3.","examples":["#3969D9"]},"chart4":{"type":"string","description":"CSS color for chart4.","examples":["#3969D9"]},"chart5":{"type":"string","description":"CSS color for chart5.","examples":["#3969D9"]},"sidebar":{"type":"string","description":"CSS color for sidebar.","examples":["#3969D9"]},"sidebarForeground":{"type":"string","description":"CSS color for sidebarForeground.","examples":["#3969D9"]},"sidebarPrimary":{"type":"string","description":"CSS color for sidebarPrimary.","examples":["#3969D9"]},"sidebarPrimaryForeground":{"type":"string","description":"CSS color for sidebarPrimaryForeground.","examples":["#3969D9"]},"sidebarAccent":{"type":"string","description":"CSS color for sidebarAccent.","examples":["#3969D9"]},"sidebarAccentForeground":{"type":"string","description":"CSS color for sidebarAccentForeground.","examples":["#3969D9"]},"sidebarBorder":{"type":"string","description":"CSS color for sidebarBorder.","examples":["#3969D9"]},"sidebarRing":{"type":"string","description":"CSS color for sidebarRing.","examples":["#3969D9"]}}},"ThemeColors":{"type":"object","additionalProperties":true,"properties":{"background":{"type":"string","description":"CSS color for background.","examples":["#3969D9"]},"foreground":{"type":"string","description":"CSS color for foreground.","examples":["#3969D9"]},"card":{"type":"string","description":"CSS color for card.","examples":["#3969D9"]},"cardForeground":{"type":"string","description":"CSS color for cardForeground.","examples":["#3969D9"]},"popover":{"type":"string","description":"CSS color for popover.","examples":["#3969D9"]},"popoverForeground":{"type":"string","description":"CSS color for popoverForeground.","examples":["#3969D9"]},"primary":{"type":"string","description":"CSS color for primary.","examples":["#3969D9"]},"primaryForeground":{"type":"string","description":"CSS color for primaryForeground.","examples":["#3969D9"]},"secondary":{"type":"string","description":"CSS color for secondary.","examples":["#3969D9"]},"secondaryForeground":{"type":"string","description":"CSS color for secondaryForeground.","examples":["#3969D9"]},"muted":{"type":"string","description":"CSS color for muted.","examples":["#3969D9"]},"mutedForeground":{"type":"string","description":"CSS color for mutedForeground.","examples":["#3969D9"]},"accent":{"type":"string","description":"CSS color for accent.","examples":["#3969D9"]},"accentForeground":{"type":"string","description":"CSS color for accentForeground.","examples":["#3969D9"]},"destructive":{"type":"string","description":"CSS color for destructive.","examples":["#3969D9"]},"destructiveForeground":{"type":"string","description":"CSS color for destructiveForeground.","examples":["#3969D9"]},"border":{"type":"string","description":"CSS color for border.","examples":["#3969D9"]},"input":{"type":"string","description":"CSS color for input.","examples":["#3969D9"]},"ring":{"type":"string","description":"CSS color for ring.","examples":["#3969D9"]},"text":{"type":"string","description":"CSS color for text.","examples":["#3969D9"]},"chart1":{"type":"string","description":"CSS color for chart1.","examples":["#3969D9"]},"chart2":{"type":"string","description":"CSS color for chart2.","examples":["#3969D9"]},"chart3":{"type":"string","description":"CSS color for chart3.","examples":["#3969D9"]},"chart4":{"type":"string","description":"CSS color for chart4.","examples":["#3969D9"]},"chart5":{"type":"string","description":"CSS color for chart5.","examples":["#3969D9"]},"sidebar":{"type":"string","description":"CSS color for sidebar.","examples":["#3969D9"]},"sidebarForeground":{"type":"string","description":"CSS color for sidebarForeground.","examples":["#3969D9"]},"sidebarPrimary":{"type":"string","description":"CSS color for sidebarPrimary.","examples":["#3969D9"]},"sidebarPrimaryForeground":{"type":"string","description":"CSS color for sidebarPrimaryForeground.","examples":["#3969D9"]},"sidebarAccent":{"type":"string","description":"CSS color for sidebarAccent.","examples":["#3969D9"]},"sidebarAccentForeground":{"type":"string","description":"CSS color for sidebarAccentForeground.","examples":["#3969D9"]},"sidebarBorder":{"type":"string","description":"CSS color for sidebarBorder.","examples":["#3969D9"]},"sidebarRing":{"type":"string","description":"CSS color for sidebarRing.","examples":["#3969D9"]},"dark":{"$ref":"#/components/schemas/ThemePalette"}}},"CustomTheme":{"type":"object","description":"Colors, typography, layout, and visual styling for a form.","additionalProperties":true,"properties":{"logo":{"anyOf":[{"$ref":"#/components/schemas/ThemeAsset"},{"type":"null"}]},"background":{"type":"object","additionalProperties":false,"properties":{"brightness":{"type":"number","minimum":0,"maximum":100},"layout":{"type":"string","enum":["fullscreen","right","left","split"]},"image":{"anyOf":[{"$ref":"#/components/schemas/ThemeAsset"},{"type":"null"}]}}},"colors":{"$ref":"#/components/schemas/ThemeColors"},"alignment":{"type":"object","additionalProperties":false,"properties":{"welcomeAndEndings":{"type":"integer","enum":[0,1,2]},"questions":{"type":"integer","enum":[0,1,2]},"logo":{"type":"integer","enum":[1,2,3,4,5,6]}}},"size":{"type":"object","additionalProperties":false,"properties":{"welcomeAndEndings":{"type":"integer","enum":[0,1,2]},"questions":{"type":"integer","enum":[0,1,2]}}},"font":{"type":"string","examples":["Inter"]},"corners":{"type":"integer","enum":[0,1,2]},"logoPlacement":{"type":"object","additionalProperties":false,"properties":{"align":{"type":"string","enum":["left","center","right"]},"vertical":{"type":"string","enum":["inside","overlap","below"]}}},"layout":{"type":"object","additionalProperties":false,"properties":{"pageWidth":{"type":"string","description":"CSS width."},"baseFontSize":{"type":"string","description":"CSS font size."}}},"logoSize":{"type":"object","additionalProperties":true,"properties":{"width":{"type":"number"},"height":{"type":"number"},"radius":{"type":"number"}}},"coverHeight":{"type":"string"},"inputs":{"type":"object","additionalProperties":false,"properties":{"width":{"type":"string","description":"CSS width."},"height":{"type":"string","description":"CSS height."},"background":{"type":"string","description":"CSS color."},"placeholder":{"type":"string","description":"CSS color."},"border":{"type":"string","description":"CSS color."},"borderWidth":{"type":"number","description":"Border width in pixels."},"radius":{"type":"number","description":"Corner radius in pixels."},"marginBottom":{"type":"number","description":"Bottom margin in pixels."},"paddingX":{"type":"number","description":"Horizontal padding in pixels."}}},"buttons":{"type":"object","additionalProperties":false,"properties":{"width":{"type":"string","description":"CSS width."},"height":{"type":"string","description":"CSS height."},"alignment":{"type":"string","enum":["left","center","right"]},"fontSize":{"type":"number","description":"Font size in pixels."},"radius":{"type":"number","description":"Corner radius in pixels."},"background":{"type":"string","description":"CSS color."},"text":{"type":"string","description":"CSS color."},"marginY":{"type":"number","description":"Vertical margin in pixels."},"paddingX":{"type":"number","description":"Horizontal padding in pixels."}}},"customCss":{"type":"string","description":"Custom CSS applied to the form. Pro."},"theme":{"type":"string","enum":["light","dark"],"description":"Initial color mode."}}},"FormType":{"type":"string","enum":["SINGLE","MULTI","CONVERSATIONAL"],"description":"Form presentation model. CONVERSATIONAL is reserved for a future renderer and currently returns 422 UNSUPPORTED_FORM_TYPE when used for creation."},"BlockCollection":{"type":"object","required":["items"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Block"}}}},"BlockCreateRequest":{"type":"object","required":["block"],"additionalProperties":false,"properties":{"block":{"$ref":"#/components/schemas/Block"},"position":{"type":"integer","minimum":0,"description":"Zero-based insertion position. Defaults to the end of the top-level collection."}}},"BlockCollectionReplaceRequest":{"type":"object","required":["blocks"],"additionalProperties":false,"properties":{"blocks":{"type":"array","description":"Complete ordered replacement collection.","items":{"$ref":"#/components/schemas/Block"}}}},"BlockReplaceRequest":{"type":"object","required":["block"],"additionalProperties":false,"properties":{"block":{"$ref":"#/components/schemas/Block"},"position":{"type":"integer","minimum":0,"description":"Optional final zero-based position for replacing and moving the block atomically."}}},"ThemeAsset":{"type":"object","additionalProperties":true,"description":"Image asset used for a logo or background.","properties":{"id":{"type":"string"},"url":{"type":"string","format":"uri"},"width":{"type":"number","minimum":0},"height":{"type":"number","minimum":0},"base64":{"type":"string","description":"Optional data URL or encoded preview."}}},"BlockProperties":{"type":"object","additionalProperties":true,"description":"Type-specific block settings. Unsupported combinations are ignored by the renderer.","properties":{"buttonText":{"type":"string","description":"Welcome or ending button label."},"buttonLink":{"type":"string","format":"uri","description":"Ending button destination."},"shareButtons":{"type":"boolean","description":"Show social sharing actions on a welcome or ending block."},"maxChars":{"type":"integer","minimum":-1,"description":"Maximum text length; -1 disables the limit."},"min":{"type":"number","description":"Minimum numeric value."},"max":{"type":"number","description":"Maximum numeric value."},"minVal":{"type":"boolean","description":"Enable the minimum numeric bound."},"maxVal":{"type":"boolean","description":"Enable the maximum numeric bound."},"dateFormat":{"type":"string","enum":["DDMMYYYY","MMDDYYYY","YYYYMMDD"]},"dateSeparator":{"type":"string","description":"Date separator such as /, -, or ."},"disabledDays":{"type":"integer","minimum":1,"maximum":9},"beforeDate":{"type":"string","format":"date-time"},"afterDate":{"type":"string","format":"date-time"},"specificDates":{"type":"array","items":{"type":"string","format":"date-time"}},"weekStartsOn":{"type":"integer","minimum":1,"maximum":7},"quotationMarks":{"type":"boolean","description":"Wrap a statement in quotation marks."},"multiSelection":{"type":"boolean","description":"Allow more than one choice."},"randomize":{"type":"boolean","description":"Shuffle choices for each respondent."},"alphaOrder":{"type":"boolean","description":"Sort choices alphabetically."},"defaultCountry":{"type":"string","description":"ISO 3166-1 alpha-2 default country code."},"from":{"type":"number","description":"Start of an opinion scale."},"to":{"type":"number","description":"End of an opinion scale."},"scaleStep":{"type":"number","description":"Step interval for a scale or slider."},"limit":{"type":"integer","minimum":1,"description":"Maximum number of uploaded files."},"currency":{"type":"string","description":"ISO 4217 currency code."},"amount":{"type":"string","description":"Payment amount represented as a decimal string."},"paymentGateway":{"type":"string","description":"Configured payment gateway key, for example stripe."},"showFields":{"type":"boolean","description":"Show split date fields."},"showDatePicker":{"type":"boolean","description":"Show a date picker."},"showLabels":{"type":"boolean","description":"Show picture-choice labels."},"superSize":{"type":"boolean","description":"Use the large picture-choice layout."},"otherOption":{"type":"boolean","description":"Add an Other choice."},"otherText":{"type":"string","description":"Custom label for the Other choice."},"horizontalAlign":{"type":"boolean","description":"Lay choices out horizontally."},"verticalAlign":{"type":"boolean","description":"Stack choices vertically."},"perRow":{"type":"integer","minimum":1},"imageAlign":{"type":"string","enum":["left","center","right"]},"altText":{"type":"boolean","description":"Enable custom alternative text."},"imageAlt":{"type":"string","description":"Alternative text for an image block."},"imageWidth":{"type":"number","description":"Rendered image width."},"icon":{"type":"string","enum":["star","heart"]},"firstLabel":{"type":"string","description":"Start label for an opinion scale."},"secondLabel":{"type":"string","description":"Middle label for an opinion scale."},"thirdLabel":{"type":"string","description":"End label for an opinion scale."},"leftLabel":{"type":"boolean","description":"Show the left scale label."},"centerLabel":{"type":"boolean","description":"Show the center scale label."},"rightLabel":{"type":"boolean","description":"Show the right scale label."},"addressOrContact":{"type":"object","additionalProperties":false,"description":"Per-part visibility and required state for address and contact-info blocks.","properties":{"firstName":{"type":"object","additionalProperties":false,"properties":{"hide":{"type":"boolean"},"required":{"type":"boolean"}}},"lastName":{"type":"object","additionalProperties":false,"properties":{"hide":{"type":"boolean"},"required":{"type":"boolean"}}},"email":{"type":"object","additionalProperties":false,"properties":{"hide":{"type":"boolean"},"required":{"type":"boolean"}}},"phone":{"type":"object","additionalProperties":false,"properties":{"hide":{"type":"boolean"},"required":{"type":"boolean"}}},"company":{"type":"object","additionalProperties":false,"properties":{"hide":{"type":"boolean"},"required":{"type":"boolean"}}},"address":{"type":"object","additionalProperties":false,"properties":{"hide":{"type":"boolean"},"required":{"type":"boolean"}}},"address2":{"type":"object","additionalProperties":false,"properties":{"hide":{"type":"boolean"},"required":{"type":"boolean"}}},"city":{"type":"object","additionalProperties":false,"properties":{"hide":{"type":"boolean"},"required":{"type":"boolean"}}},"state":{"type":"object","additionalProperties":false,"properties":{"hide":{"type":"boolean"},"required":{"type":"boolean"}}},"zip":{"type":"object","additionalProperties":false,"properties":{"hide":{"type":"boolean"},"required":{"type":"boolean"}}},"country":{"type":"object","additionalProperties":false,"properties":{"hide":{"type":"boolean"},"required":{"type":"boolean"}}}}},"legalText":{"type":"string","description":"Legal copy or linked terms."},"legalType":{"type":"integer","enum":[1,2],"description":"1 = URL, 2 = inline text."},"legalStopFurther":{"type":"boolean","description":"Prevent submission when consent is rejected."},"showSeconds":{"type":"boolean","description":"Include seconds in a time input."},"showTimePicker":{"type":"boolean","description":"Show the time picker UI."},"videoLink":{"type":"string","format":"uri"},"pdfLink":{"type":"string","format":"uri"},"embedLink":{"type":"string","format":"uri"},"captchaType":{"type":"string","enum":["turnstile","reCaptcha","hCaptcha"]},"placeholderText":{"type":"string","description":"Placeholder shown by compatible input blocks."},"numberFormat":{"type":"string","description":"Number formatting preset."},"allowedFiles":{"type":"array","items":{"type":"string"},"description":"Allowed file extensions or MIME types."},"multipleFiles":{"type":"boolean","description":"Allow multiple file uploads."},"maxFileSize":{"type":"boolean","description":"Enable the configured maximum file-size restriction."},"hide":{"type":"boolean","description":"Hide a hidden-field block from the visible form."},"showActions":{"type":"boolean","description":"Show logic actions in the editor."},"badgeType":{"type":"string","enum":["off","number","letter"]},"colorOption":{"type":"boolean","description":"Enable per-choice colors."},"rule":{"type":"object","additionalProperties":true,"description":"Logic rule definition for a logic block."},"image":{"type":"object","additionalProperties":true,"description":"Optional block image and layout data."}}}}}}