{
  "openapi": "3.1.0",
  "info": {
    "title": "fomr Platform API",
    "description": "The fomr Platform API: forms, Private Templates, and submissions for the organization behind a Personal Access Token. The version is the Contract Revision date of the latest additive change; breaking changes ship only under a new path version.",
    "version": "2026-10-26"
  },
  "servers": [
    {
      "url": "https://platform.fomr.io"
    }
  ],
  "tags": [
    {
      "name": "Identity",
      "description": "The organization, member, and Personal Access Token behind a call."
    },
    {
      "name": "Usage",
      "description": "Plan limits, current usage, and the live API budget."
    },
    {
      "name": "Forms",
      "description": "Create, read, write, publish, and move forms through their lifecycle."
    },
    {
      "name": "Templates",
      "description": "Convert forms to and from Private Templates."
    },
    {
      "name": "AI generation",
      "description": "Generate a form from a prompt."
    },
    {
      "name": "Workspaces",
      "description": "List, create, rename, and reorder workspaces."
    },
    {
      "name": "Submissions",
      "description": "Read and export the responses of a form."
    },
    {
      "name": "Workflows",
      "description": "Manage the workflows of a form and list integration connections."
    },
    {
      "name": "Themes",
      "description": "Read the themes a form can use."
    },
    {
      "name": "Domains",
      "description": "List custom domains and attach them to forms."
    }
  ],
  "security": [
    {
      "bearerAuth": []
    }
  ],
  "paths": {
    "/v1/me": {
      "get": {
        "operationId": "getMe",
        "summary": "Who am I",
        "tags": [
          "Identity"
        ],
        "description": "Returns the organization, member, and credential behind the calling token. Costs 1 API credit.",
        "x-fomr-permission": "personal_access_tokens",
        "x-fomr-cost": 1,
        "responses": {
          "200": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformMe"
                }
              }
            }
          },
          "401": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformError"
                }
              }
            }
          },
          "403": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformForbiddenError"
                }
              }
            }
          },
          "429": {
            "description": "A rejected call. The organization budget names the policy it rejected the call under; the request floor that bounds hammering sends the envelope alone.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformThrottledErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/me/token": {
      "delete": {
        "operationId": "revokeCurrentToken",
        "summary": "Revoke the calling token",
        "tags": [
          "Identity"
        ],
        "description": "Revokes the Personal Access Token that made this call. Every later call with it fails. Costs 1 API credit.",
        "x-fomr-permission": "personal_access_tokens",
        "x-fomr-cost": 1,
        "responses": {
          "200": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformRevokedToken"
                }
              }
            }
          },
          "401": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformError"
                }
              }
            }
          },
          "403": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformForbiddenError"
                }
              }
            }
          },
          "429": {
            "description": "A rejected call. The organization budget names the policy it rejected the call under; the request floor that bounds hammering sends the envelope alone.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformThrottledErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/usage": {
      "get": {
        "operationId": "getUsage",
        "summary": "Read plan limits and API usage",
        "tags": [
          "Usage"
        ],
        "description": "Returns the plan, the plan limits, what the organization is using, and the live Platform API budget. Spends no API credits.",
        "x-fomr-permission": "personal_access_tokens",
        "x-fomr-cost": 0,
        "responses": {
          "200": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformUsage"
                }
              }
            }
          },
          "401": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformError"
                }
              }
            }
          },
          "403": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformForbiddenError"
                }
              }
            }
          },
          "429": {
            "description": "A rejected call. The organization budget names the policy it rejected the call under; the request floor that bounds hammering sends the envelope alone.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformThrottledErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/workspaces": {
      "get": {
        "operationId": "listWorkspaces",
        "summary": "List workspaces",
        "tags": [
          "Workspaces"
        ],
        "description": "Lists the active workspaces of the organization, the Default Workspace first, then in sidebar order. Use a workspace public ID to filter the form list, to create or generate a form in that workspace, or to move a form. Needs forms:read or templates:read. Costs 1 API credit.",
        "x-fomr-permission": "forms:read or templates:read",
        "x-fomr-cost": 1,
        "responses": {
          "200": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformWorkspaceList"
                }
              }
            }
          },
          "401": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformError"
                }
              }
            }
          },
          "403": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformForbiddenError"
                }
              }
            }
          },
          "429": {
            "description": "A rejected call. The organization budget names the policy it rejected the call under; the request floor that bounds hammering sends the envelope alone.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformThrottledErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformError"
                }
              }
            }
          }
        }
      },
      "post": {
        "operationId": "createWorkspace",
        "summary": "Create a workspace",
        "tags": [
          "Workspaces"
        ],
        "description": "Creates a workspace, placed last in the sidebar, and answers 201 with the workspace resource. The name must differ from every other active workspace without regard to case; color and icon follow the app defaults when left out. Creating needs the workspaces plan feature and room under the max_workspaces plan limit, and is refused with 402 otherwise. Needs workspace_management. Costs 1 API credit.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ModelPlatformWorkspaceCreateInputInput"
              }
            }
          }
        },
        "x-fomr-permission": "workspace_management",
        "x-fomr-cost": 1,
        "responses": {
          "201": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformWorkspace"
                }
              }
            }
          },
          "400": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformInvalidInputError"
                }
              }
            }
          },
          "401": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformError"
                }
              }
            }
          },
          "402": {
            "description": "A Plan Error: either an exhausted plan limit or a field that needs a larger plan. Branch on code.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformPlanError"
                }
              }
            }
          },
          "403": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformForbiddenError"
                }
              }
            }
          },
          "429": {
            "description": "A rejected call. The organization budget names the policy it rejected the call under; the request floor that bounds hammering sends the envelope alone.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformThrottledErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformError"
                }
              }
            }
          },
          "503": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformServiceUnavailableError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/workspaces/{workspace_public_id}": {
      "get": {
        "operationId": "getWorkspace",
        "summary": "Read a workspace",
        "tags": [
          "Workspaces"
        ],
        "description": "Reads one active workspace of the organization. A deleted workspace or a workspace of another organization answers 404. Needs forms:read or templates:read. Costs 1 API credit.",
        "parameters": [
          {
            "schema": {
              "type": "string",
              "minLength": 4,
              "maxLength": 4
            },
            "in": "path",
            "name": "workspace_public_id",
            "required": true,
            "description": "The public ID of the workspace, as listWorkspaces returns it."
          }
        ],
        "x-fomr-permission": "forms:read or templates:read",
        "x-fomr-cost": 1,
        "responses": {
          "200": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformWorkspace"
                }
              }
            }
          },
          "400": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformInvalidInputError"
                }
              }
            }
          },
          "401": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformError"
                }
              }
            }
          },
          "403": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformForbiddenError"
                }
              }
            }
          },
          "404": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformWorkspaceNotFoundError"
                }
              }
            }
          },
          "429": {
            "description": "A rejected call. The organization budget names the policy it rejected the call under; the request floor that bounds hammering sends the envelope alone.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformThrottledErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformError"
                }
              }
            }
          }
        }
      },
      "patch": {
        "operationId": "updateWorkspace",
        "summary": "Update a workspace",
        "tags": [
          "Workspaces"
        ],
        "description": "Renames a workspace, changes its color or icon, or moves it in the sidebar with position, and answers the workspace resource. Fields left out keep their value, and a call that changes nothing writes nothing. The Default Workspace can be renamed and restyled but always stays first. Needs workspace_management. Costs 1 API credit.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ModelPlatformWorkspaceUpdateInputInput"
              }
            }
          }
        },
        "parameters": [
          {
            "schema": {
              "type": "string",
              "minLength": 4,
              "maxLength": 4
            },
            "in": "path",
            "name": "workspace_public_id",
            "required": true,
            "description": "The public ID of the workspace, as listWorkspaces returns it."
          }
        ],
        "x-fomr-permission": "workspace_management",
        "x-fomr-cost": 1,
        "responses": {
          "200": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformWorkspace"
                }
              }
            }
          },
          "400": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformInvalidInputError"
                }
              }
            }
          },
          "401": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformError"
                }
              }
            }
          },
          "403": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformForbiddenError"
                }
              }
            }
          },
          "404": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformWorkspaceNotFoundError"
                }
              }
            }
          },
          "429": {
            "description": "A rejected call. The organization budget names the policy it rejected the call under; the request floor that bounds hammering sends the envelope alone.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformThrottledErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformError"
                }
              }
            }
          },
          "503": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformServiceUnavailableError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/domains": {
      "get": {
        "operationId": "listDomains",
        "summary": "List domains",
        "tags": [
          "Domains"
        ],
        "description": "Lists the custom domains and fomr subdomains of the organization with their verification state. Use the host of a verified, active domain to set the share link of a form. Domains are added and verified in the app. Needs domains:read. Costs 1 API credit.",
        "x-fomr-permission": "domains:read",
        "x-fomr-cost": 1,
        "responses": {
          "200": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformDomainList"
                }
              }
            }
          },
          "401": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformError"
                }
              }
            }
          },
          "403": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformForbiddenError"
                }
              }
            }
          },
          "429": {
            "description": "A rejected call. The organization budget names the policy it rejected the call under; the request floor that bounds hammering sends the envelope alone.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformThrottledErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/themes": {
      "get": {
        "operationId": "listThemes",
        "summary": "List themes",
        "tags": [
          "Themes"
        ],
        "description": "Lists the themes a form can use: the system themes fomr provides, then the themes of the organization, each with its design properties. Pass a theme ID as styles.theme_id when creating a form or replacing its draft. Needs forms:read or templates:read. Costs 1 API credit.",
        "x-fomr-permission": "forms:read or templates:read",
        "x-fomr-cost": 1,
        "responses": {
          "200": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformThemeList"
                }
              }
            }
          },
          "401": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformError"
                }
              }
            }
          },
          "403": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformForbiddenError"
                }
              }
            }
          },
          "429": {
            "description": "A rejected call. The organization budget names the policy it rejected the call under; the request floor that bounds hammering sends the envelope alone.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformThrottledErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/themes/{theme_id}": {
      "get": {
        "operationId": "getTheme",
        "summary": "Read a theme",
        "tags": [
          "Themes"
        ],
        "description": "Reads one theme by the ID styles.theme_id carries: a system theme or a theme of the organization, with its design properties. A theme of another organization answers 404. Needs forms:read or templates:read. Costs 1 API credit.",
        "parameters": [
          {
            "schema": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$"
            },
            "in": "path",
            "name": "theme_id",
            "required": true,
            "description": "The ID of the theme, as styles.theme_id carries it."
          }
        ],
        "x-fomr-permission": "forms:read or templates:read",
        "x-fomr-cost": 1,
        "responses": {
          "200": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformTheme"
                }
              }
            }
          },
          "400": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformInvalidInputError"
                }
              }
            }
          },
          "401": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformError"
                }
              }
            }
          },
          "403": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformForbiddenError"
                }
              }
            }
          },
          "404": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformNotFoundError"
                }
              }
            }
          },
          "429": {
            "description": "A rejected call. The organization budget names the policy it rejected the call under; the request floor that bounds hammering sends the envelope alone.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformThrottledErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/forms": {
      "get": {
        "operationId": "listForms",
        "summary": "List forms",
        "tags": [
          "Forms"
        ],
        "description": "Lists the forms of the organization, most recently changed first. Set is_template to true to list Private Templates instead. Read further pages by passing next_cursor back as cursor until it comes back null. Needs forms:read or templates:read. Costs 1 API credit.",
        "parameters": [
          {
            "schema": {
              "default": "false",
              "type": "string",
              "enum": [
                "true",
                "false"
              ]
            },
            "in": "query",
            "name": "is_template",
            "required": false,
            "description": "List Private Templates instead of forms."
          },
          {
            "schema": {
              "type": "string",
              "enum": [
                "draft",
                "published",
                "archived"
              ]
            },
            "in": "query",
            "name": "status",
            "required": false,
            "description": "Keep only forms in this state. Omit for every state."
          },
          {
            "schema": {
              "type": "string",
              "minLength": 4,
              "maxLength": 4
            },
            "in": "query",
            "name": "workspace_public_id",
            "required": false,
            "description": "Keep only forms in this workspace. Omit for every workspace."
          },
          {
            "schema": {
              "type": "string",
              "maxLength": 100
            },
            "in": "query",
            "name": "q",
            "required": false,
            "description": "Keep only forms whose name contains this fragment, ignoring case."
          },
          {
            "schema": {
              "default": "updated_at",
              "type": "string",
              "enum": [
                "updated_at",
                "created_at",
                "name"
              ]
            },
            "in": "query",
            "name": "sort",
            "required": false,
            "description": "The field the page is ordered by."
          },
          {
            "schema": {
              "default": "desc",
              "type": "string",
              "enum": [
                "asc",
                "desc"
              ]
            },
            "in": "query",
            "name": "order",
            "required": false,
            "description": "The direction of the sort."
          },
          {
            "schema": {
              "default": 25,
              "type": "integer",
              "minimum": 1,
              "maximum": 100
            },
            "in": "query",
            "name": "limit",
            "required": false,
            "description": "How many forms one page holds."
          },
          {
            "schema": {
              "type": "string"
            },
            "in": "query",
            "name": "cursor",
            "required": false,
            "description": "The next_cursor of the previous page. Opaque: pass it back exactly as received."
          }
        ],
        "x-fomr-permission": "forms:read or templates:read",
        "x-fomr-cost": 1,
        "responses": {
          "200": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformFormList"
                }
              }
            }
          },
          "400": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformInvalidInputError"
                }
              }
            }
          },
          "401": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformError"
                }
              }
            }
          },
          "403": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformForbiddenError"
                }
              }
            }
          },
          "429": {
            "description": "A rejected call. The organization budget names the policy it rejected the call under; the request floor that bounds hammering sends the envelope alone.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformThrottledErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformError"
                }
              }
            }
          }
        }
      },
      "post": {
        "operationId": "createForm",
        "summary": "Create a form",
        "tags": [
          "Forms"
        ],
        "description": "Creates a form, or a Private Template with is_template true, from a Form Blueprint and answers with the form resource plus the stored Draft Document under draft, so every minted page and block ID is available at once. The draft ETag is sent as the ETag response header. styles.theme_id picks the theme, and the default theme applies without it; the form public ID and the other styles fields are read-only on write, while is_template and access are honored here. Use dry_run=true to validate without writing. Needs forms:write, or templates:write for a Private Template. Costs 1 API credit.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ModelPlatformFormBlueprintInput"
              }
            }
          }
        },
        "parameters": [
          {
            "schema": {
              "default": "false",
              "type": "string",
              "enum": [
                "true",
                "false"
              ]
            },
            "in": "query",
            "name": "dry_run",
            "required": false,
            "description": "Validate and normalize the blueprint without writing anything. Costs the same as a real create and answers 200 with the document the real call would have stored."
          },
          {
            "schema": {
              "type": "string",
              "minLength": 4,
              "maxLength": 4
            },
            "in": "query",
            "name": "workspace_public_id",
            "required": false,
            "description": "The workspace to create the form in. Left out, the form lands in the Default Workspace."
          }
        ],
        "x-fomr-permission": "forms:write or templates:write",
        "x-fomr-cost": 1,
        "responses": {
          "200": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformFormDryRunResult"
                }
              }
            }
          },
          "201": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformFormCreateResult"
                }
              }
            }
          },
          "400": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformInvalidInputError"
                }
              }
            }
          },
          "401": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformError"
                }
              }
            }
          },
          "402": {
            "description": "A Plan Error: either an exhausted plan limit or a field that needs a larger plan. Branch on code.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformPlanError"
                }
              }
            }
          },
          "403": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformForbiddenError"
                }
              }
            }
          },
          "429": {
            "description": "A rejected call. The organization budget names the policy it rejected the call under; the request floor that bounds hammering sends the envelope alone.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformThrottledErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformError"
                }
              }
            }
          },
          "503": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformServiceUnavailableError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/forms/{form_public_id}": {
      "get": {
        "operationId": "getForm",
        "summary": "Read a form",
        "tags": [
          "Forms"
        ],
        "description": "Reads one form or Private Template: its lifecycle state, whether the draft holds changes that are not published yet, whether it is taking submissions, how many it holds, and where to open it. Needs forms:read or templates:read. Costs 1 API credit.",
        "parameters": [
          {
            "schema": {
              "type": "string",
              "minLength": 10,
              "maxLength": 10,
              "pattern": "^[A-Za-z0-9_-]+$"
            },
            "in": "path",
            "name": "form_public_id",
            "required": true,
            "description": "The public ID of the form or Private Template."
          }
        ],
        "x-fomr-permission": "forms:read or templates:read",
        "x-fomr-cost": 1,
        "responses": {
          "200": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformForm"
                }
              }
            }
          },
          "400": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformInvalidInputError"
                }
              }
            }
          },
          "401": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformError"
                }
              }
            }
          },
          "403": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformForbiddenError"
                }
              }
            }
          },
          "404": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformNotFoundError"
                }
              }
            }
          },
          "429": {
            "description": "A rejected call. The organization budget names the policy it rejected the call under; the request floor that bounds hammering sends the envelope alone.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformThrottledErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformError"
                }
              }
            }
          }
        }
      },
      "delete": {
        "operationId": "deleteForm",
        "summary": "Move a form to Trash",
        "tags": [
          "Forms"
        ],
        "description": "Moves the form to Trash. The form is unpublished, so the share link stops serving immediately, and the form leaves every list and read until it is restored. Trash keeps it for 30 days, then deletes it permanently; restore brings it back as a draft. Needs forms:write, or templates:write for a Private Template. Costs 1 API credit.",
        "parameters": [
          {
            "schema": {
              "type": "string",
              "minLength": 10,
              "maxLength": 10,
              "pattern": "^[A-Za-z0-9_-]+$"
            },
            "in": "path",
            "name": "form_public_id",
            "required": true,
            "description": "The public ID of the form or Private Template."
          }
        ],
        "x-fomr-permission": "forms:write or templates:write",
        "x-fomr-cost": 1,
        "responses": {
          "204": {
            "description": "Default Response"
          },
          "400": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformInvalidInputError"
                }
              }
            }
          },
          "401": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformError"
                }
              }
            }
          },
          "403": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformForbiddenError"
                }
              }
            }
          },
          "404": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformNotFoundError"
                }
              }
            }
          },
          "429": {
            "description": "A rejected call. The organization budget names the policy it rejected the call under; the request floor that bounds hammering sends the envelope alone.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformThrottledErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformError"
                }
              }
            }
          },
          "503": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformServiceUnavailableError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/forms/{form_public_id}/draft": {
      "get": {
        "operationId": "getFormDraft",
        "summary": "Read the draft document",
        "tags": [
          "Forms"
        ],
        "description": "Reads the Draft Document: the whole form as it stands in the editor, hidden pages and blocks included, with every ID and default filled in. The response carries a weak ETag equal to the draft hash; keep it to tell whether the draft moved under you. A draft that cannot be published reads fine. Needs forms:read or templates:read. Costs 1 API credit.",
        "parameters": [
          {
            "schema": {
              "type": "string",
              "minLength": 10,
              "maxLength": 10,
              "pattern": "^[A-Za-z0-9_-]+$"
            },
            "in": "path",
            "name": "form_public_id",
            "required": true,
            "description": "The public ID of the form or Private Template."
          }
        ],
        "x-fomr-permission": "forms:read or templates:read",
        "x-fomr-cost": 1,
        "responses": {
          "200": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformCanonicalBlueprint"
                }
              }
            }
          },
          "400": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformInvalidInputError"
                }
              }
            }
          },
          "401": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformError"
                }
              }
            }
          },
          "403": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformForbiddenError"
                }
              }
            }
          },
          "404": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformNotFoundError"
                }
              }
            }
          },
          "429": {
            "description": "A rejected call. The organization budget names the policy it rejected the call under; the request floor that bounds hammering sends the envelope alone.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformThrottledErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformError"
                }
              }
            }
          }
        }
      },
      "put": {
        "operationId": "updateFormDraft",
        "summary": "Replace the draft document",
        "tags": [
          "Forms"
        ],
        "description": "Replaces the Draft Document with the one you send. Pages and blocks are matched by public ID and updated in place, so database IDs, answers, and pipe references survive; an item without an ID is created with a server-minted ID; an item you leave out is removed and its answers are kept; a removed ID you send again is restored. Page order is the array order and the first page is the entrypoint. is_template and access are read-only here and ignored; styles.theme_id changes the theme, and the other styles fields are read-only. A document identical to the stored one writes nothing and returns the same ETag. Use dry_run=true to validate without writing. Needs forms:write, or templates:write for a Private Template. Costs 1 API credit.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ModelPlatformFormBlueprintInput"
              }
            }
          }
        },
        "parameters": [
          {
            "schema": {
              "default": "false",
              "type": "string",
              "enum": [
                "true",
                "false"
              ]
            },
            "in": "query",
            "name": "dry_run",
            "required": false,
            "description": "Validate the document and resolve every ID without writing anything. Costs the same as a real write and answers 200 with the document the real call would have stored, without an ETag."
          },
          {
            "schema": {
              "type": "string",
              "minLength": 10,
              "maxLength": 10,
              "pattern": "^[A-Za-z0-9_-]+$"
            },
            "in": "path",
            "name": "form_public_id",
            "required": true,
            "description": "The public ID of the form or Private Template."
          }
        ],
        "x-fomr-permission": "forms:write or templates:write",
        "x-fomr-cost": 1,
        "responses": {
          "200": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformCanonicalBlueprint"
                }
              }
            }
          },
          "400": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformInvalidInputError"
                }
              }
            }
          },
          "401": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformError"
                }
              }
            }
          },
          "402": {
            "description": "A Plan Error: either an exhausted plan limit or a field that needs a larger plan. Branch on code.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformPlanError"
                }
              }
            }
          },
          "403": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformForbiddenError"
                }
              }
            }
          },
          "404": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformNotFoundError"
                }
              }
            }
          },
          "409": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformFormArchivedError"
                }
              }
            }
          },
          "429": {
            "description": "A rejected call. The organization budget names the policy it rejected the call under; the request floor that bounds hammering sends the envelope alone.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformThrottledErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformError"
                }
              }
            }
          },
          "503": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformServiceUnavailableError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/forms/{form_public_id}/published": {
      "get": {
        "operationId": "getFormPublished",
        "summary": "Read the published document",
        "tags": [
          "Forms"
        ],
        "description": "Reads the Published Document: the version respondents are filling in right now, after publish-time stripping removed every hidden page and block. A form with nothing published answers 404 FORM_NOT_PUBLISHED. Needs forms:read or templates:read. Costs 1 API credit.",
        "parameters": [
          {
            "schema": {
              "type": "string",
              "minLength": 10,
              "maxLength": 10,
              "pattern": "^[A-Za-z0-9_-]+$"
            },
            "in": "path",
            "name": "form_public_id",
            "required": true,
            "description": "The public ID of the form or Private Template."
          }
        ],
        "x-fomr-permission": "forms:read or templates:read",
        "x-fomr-cost": 1,
        "responses": {
          "200": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformCanonicalBlueprint"
                }
              }
            }
          },
          "400": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformInvalidInputError"
                }
              }
            }
          },
          "401": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformError"
                }
              }
            }
          },
          "403": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformForbiddenError"
                }
              }
            }
          },
          "404": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformFormDocumentNotFoundError"
                }
              }
            }
          },
          "429": {
            "description": "A rejected call. The organization budget names the policy it rejected the call under; the request floor that bounds hammering sends the envelope alone.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformThrottledErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/forms/{form_public_id}/submissions": {
      "get": {
        "operationId": "listSubmissions",
        "summary": "List submissions",
        "tags": [
          "Submissions"
        ],
        "description": "Lists submissions by created_at in the requested direction, newest first by default. Use the opaque cursor for the next page and filter by status, inclusive start or end timestamps, and published version. Partial Responses need the partial_response_access plan feature. Needs forms:read. Costs 1 API credit.",
        "parameters": [
          {
            "schema": {
              "default": "completed",
              "type": "string",
              "enum": [
                "completed",
                "partial",
                "all"
              ]
            },
            "in": "query",
            "name": "status",
            "required": false,
            "description": "Keep completed submissions, Partial Responses, or both. Partial and all need Partial Response Access."
          },
          {
            "schema": {
              "type": "string",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
            },
            "in": "query",
            "name": "since",
            "required": false,
            "description": "Include submissions created at or after this timestamp."
          },
          {
            "schema": {
              "type": "string",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
            },
            "in": "query",
            "name": "until",
            "required": false,
            "description": "Include submissions created at or before this timestamp."
          },
          {
            "schema": {
              "type": "integer",
              "exclusiveMinimum": 0,
              "maximum": 9007199254740991
            },
            "in": "query",
            "name": "published_version",
            "required": false,
            "description": "Keep only submissions for this published version."
          },
          {
            "schema": {
              "default": 25,
              "type": "integer",
              "minimum": 1,
              "maximum": 100
            },
            "in": "query",
            "name": "limit",
            "required": false,
            "description": "How many submissions one page holds."
          },
          {
            "schema": {
              "default": "desc",
              "type": "string",
              "enum": [
                "asc",
                "desc"
              ]
            },
            "in": "query",
            "name": "order",
            "required": false,
            "description": "Sort submissions by created_at in this direction."
          },
          {
            "schema": {
              "type": "string",
              "maxLength": 512
            },
            "in": "query",
            "name": "cursor",
            "required": false,
            "description": "The next_cursor of the previous page. Opaque: pass it back exactly as received."
          },
          {
            "schema": {
              "type": "string",
              "minLength": 10,
              "maxLength": 10,
              "pattern": "^[A-Za-z0-9_-]+$"
            },
            "in": "path",
            "name": "form_public_id",
            "required": true,
            "description": "The public ID of the form or Private Template."
          }
        ],
        "x-fomr-permission": "forms:read",
        "x-fomr-cost": 1,
        "responses": {
          "200": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformSubmissionList"
                }
              }
            }
          },
          "400": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformInvalidInputError"
                }
              }
            }
          },
          "401": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformError"
                }
              }
            }
          },
          "402": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformProFeatureError"
                }
              }
            }
          },
          "403": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformForbiddenError"
                }
              }
            }
          },
          "404": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformNotFoundError"
                }
              }
            }
          },
          "429": {
            "description": "A rejected call. The organization budget names the policy it rejected the call under; the request floor that bounds hammering sends the envelope alone.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformThrottledErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/forms/{form_public_id}/submissions/export": {
      "get": {
        "operationId": "exportSubmissions",
        "summary": "Export submissions",
        "tags": [
          "Submissions"
        ],
        "description": "Streams every matching submission as an attachment, one row per submission, without creating an export job. CSV is the default; JSONL is also available. Rows come newest published version first and newest submission first within a version. Answer headers use question labels from the requested published version, current labels without that filter, or stable Form Node public IDs. Filters match list submissions. An organization runs a small number of exports at a time; retry a 503 after Retry-After. Partial Responses need the partial_response_access plan feature. Needs forms:read. Costs 1 API credit.",
        "parameters": [
          {
            "schema": {
              "default": "completed",
              "type": "string",
              "enum": [
                "completed",
                "partial",
                "all"
              ]
            },
            "in": "query",
            "name": "status",
            "required": false,
            "description": "Keep completed submissions, Partial Responses, or both. Partial and all need Partial Response Access."
          },
          {
            "schema": {
              "type": "string",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
            },
            "in": "query",
            "name": "since",
            "required": false,
            "description": "Include submissions created at or after this timestamp."
          },
          {
            "schema": {
              "type": "string",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
            },
            "in": "query",
            "name": "until",
            "required": false,
            "description": "Include submissions created at or before this timestamp."
          },
          {
            "schema": {
              "type": "integer",
              "exclusiveMinimum": 0,
              "maximum": 9007199254740991
            },
            "in": "query",
            "name": "published_version",
            "required": false,
            "description": "Keep only submissions for this published version."
          },
          {
            "schema": {
              "default": "csv",
              "type": "string",
              "enum": [
                "csv",
                "jsonl"
              ]
            },
            "in": "query",
            "name": "format",
            "required": false,
            "description": "The streamed attachment format."
          },
          {
            "schema": {
              "default": "label",
              "type": "string",
              "enum": [
                "label",
                "public_id"
              ]
            },
            "in": "query",
            "name": "header",
            "required": false,
            "description": "Use current question labels or stable Form Node public IDs as exported answer keys."
          },
          {
            "schema": {
              "type": "string",
              "minLength": 10,
              "maxLength": 10,
              "pattern": "^[A-Za-z0-9_-]+$"
            },
            "in": "path",
            "name": "form_public_id",
            "required": true,
            "description": "The public ID of the form or Private Template."
          }
        ],
        "x-fomr-permission": "forms:read",
        "x-fomr-cost": 1,
        "responses": {
          "200": {
            "description": "A streamed CSV or JSONL attachment with one row per submission.",
            "content": {
              "text/csv": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformSubmissionExportContent"
                }
              },
              "application/jsonl": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformSubmissionExportContent"
                }
              }
            }
          },
          "400": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformInvalidInputError"
                }
              }
            }
          },
          "401": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformError"
                }
              }
            }
          },
          "402": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformProFeatureError"
                }
              }
            }
          },
          "403": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformForbiddenError"
                }
              }
            }
          },
          "404": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformNotFoundError"
                }
              }
            }
          },
          "429": {
            "description": "A rejected call. The organization budget names the policy it rejected the call under; the request floor that bounds hammering sends the envelope alone.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformThrottledErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformError"
                }
              }
            }
          },
          "503": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformServiceUnavailableError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/forms/{form_public_id}/submissions/{submission_public_id}": {
      "get": {
        "operationId": "getSubmission",
        "summary": "Read a submission",
        "tags": [
          "Submissions"
        ],
        "description": "Reads one submission with answers keyed by Form Node public ID, captured Hidden Values, and five-minute signed URLs for ready File Upload answers. Reading a Partial Response needs the partial_response_access plan feature. Needs forms:read. Costs 1 API credit.",
        "parameters": [
          {
            "schema": {
              "type": "string",
              "minLength": 10,
              "maxLength": 10,
              "pattern": "^[A-Za-z0-9_-]+$"
            },
            "in": "path",
            "name": "form_public_id",
            "required": true,
            "description": "The public ID of the form."
          },
          {
            "schema": {
              "type": "string",
              "minLength": 22,
              "maxLength": 22,
              "pattern": "^[A-Za-z0-9_-]+$"
            },
            "in": "path",
            "name": "submission_public_id",
            "required": true,
            "description": "The public ID of the submission."
          }
        ],
        "x-fomr-permission": "forms:read",
        "x-fomr-cost": 1,
        "responses": {
          "200": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformSubmission"
                }
              }
            }
          },
          "400": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformInvalidInputError"
                }
              }
            }
          },
          "401": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformError"
                }
              }
            }
          },
          "402": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformProFeatureError"
                }
              }
            }
          },
          "403": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformForbiddenError"
                }
              }
            }
          },
          "404": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformNotFoundError"
                }
              }
            }
          },
          "429": {
            "description": "A rejected call. The organization budget names the policy it rejected the call under; the request floor that bounds hammering sends the envelope alone.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformThrottledErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/forms/generate": {
      "post": {
        "operationId": "generateForm",
        "summary": "Generate a form with AI",
        "tags": [
          "AI generation"
        ],
        "description": "Generates a form from a prompt, creates it as an ordinary draft, and answers with the form resource plus its stored Draft Document and ETag. The synchronous call usually takes a few seconds and gives up after 30 seconds. Needs forms:write, or templates:write for a Private Template. Costs 10 API credits.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ModelPlatformFormGenerateInputInput"
              }
            }
          }
        },
        "x-fomr-permission": "forms:write or templates:write",
        "x-fomr-cost": 10,
        "responses": {
          "201": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformFormCreateResult"
                }
              }
            }
          },
          "400": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformInvalidInputError"
                }
              }
            }
          },
          "401": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformError"
                }
              }
            }
          },
          "402": {
            "description": "A Plan Error: either an exhausted plan limit or a field that needs a larger plan. Branch on code.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformPlanError"
                }
              }
            }
          },
          "403": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformForbiddenError"
                }
              }
            }
          },
          "429": {
            "description": "A rejected call. The organization budget names the policy it rejected the call under; the request floor that bounds hammering sends the envelope alone.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformThrottledErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformError"
                }
              }
            }
          },
          "503": {
            "description": "Generation could not run because the AI provider or the Platform write pool was temporarily unavailable.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformFormGenerateUnavailableError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/forms/{form_public_id}/restore": {
      "post": {
        "operationId": "restoreForm",
        "summary": "Restore a form from Trash",
        "tags": [
          "Forms"
        ],
        "description": "Brings a form back from Trash as a draft, in its workspace or in the Default Workspace when that workspace is gone. A deleted form stays restorable for 30 days. A form that is not in Trash answers 200 with the resource and writes nothing. Needs forms:write, or templates:write for a Private Template. Costs 1 API credit.",
        "parameters": [
          {
            "schema": {
              "type": "string",
              "minLength": 10,
              "maxLength": 10,
              "pattern": "^[A-Za-z0-9_-]+$"
            },
            "in": "path",
            "name": "form_public_id",
            "required": true,
            "description": "The public ID of the form or Private Template."
          }
        ],
        "x-fomr-permission": "forms:write or templates:write",
        "x-fomr-cost": 1,
        "responses": {
          "200": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformForm"
                }
              }
            }
          },
          "400": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformInvalidInputError"
                }
              }
            }
          },
          "401": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformError"
                }
              }
            }
          },
          "403": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformForbiddenError"
                }
              }
            }
          },
          "404": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformNotFoundError"
                }
              }
            }
          },
          "429": {
            "description": "A rejected call. The organization budget names the policy it rejected the call under; the request floor that bounds hammering sends the envelope alone.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformThrottledErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformError"
                }
              }
            }
          },
          "503": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformServiceUnavailableError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/forms/{form_public_id}/move": {
      "post": {
        "operationId": "moveForm",
        "summary": "Move a form to another workspace",
        "tags": [
          "Forms"
        ],
        "description": "Moves the form into another workspace and answers the form resource. Moving needs the workspaces plan feature and is refused with 402 otherwise; a form already in the target workspace answers 200 and writes nothing. Needs forms:write, or templates:write for a Private Template. Costs 1 API credit.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ModelPlatformFormMoveInputInput"
              }
            }
          }
        },
        "parameters": [
          {
            "schema": {
              "type": "string",
              "minLength": 10,
              "maxLength": 10,
              "pattern": "^[A-Za-z0-9_-]+$"
            },
            "in": "path",
            "name": "form_public_id",
            "required": true,
            "description": "The public ID of the form or Private Template."
          }
        ],
        "x-fomr-permission": "forms:write or templates:write",
        "x-fomr-cost": 1,
        "responses": {
          "200": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformForm"
                }
              }
            }
          },
          "400": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformInvalidInputError"
                }
              }
            }
          },
          "401": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformError"
                }
              }
            }
          },
          "402": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformProFeatureError"
                }
              }
            }
          },
          "403": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformForbiddenError"
                }
              }
            }
          },
          "404": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformNotFoundError"
                }
              }
            }
          },
          "429": {
            "description": "A rejected call. The organization budget names the policy it rejected the call under; the request floor that bounds hammering sends the envelope alone.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformThrottledErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformError"
                }
              }
            }
          },
          "503": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformServiceUnavailableError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/forms/{form_public_id}/validate": {
      "post": {
        "operationId": "validateForm",
        "summary": "Validate a draft without publishing",
        "tags": [
          "Forms"
        ],
        "description": "Runs Publish Validation against the stored draft without publishing and without writing anything, and answers 200 whether the draft is ready or not. Every Publish Issue names its code, the path into the Draft Document, and the page and block it sits on. Run it before publish to fix everything in one pass. A Private Template cannot be published, so validating one is refused with 400 INVALID_INPUT at is_template. Needs forms:read or templates:read. Costs 1 API credit.",
        "parameters": [
          {
            "schema": {
              "type": "string",
              "minLength": 10,
              "maxLength": 10,
              "pattern": "^[A-Za-z0-9_-]+$"
            },
            "in": "path",
            "name": "form_public_id",
            "required": true,
            "description": "The public ID of the form or Private Template."
          }
        ],
        "x-fomr-permission": "forms:read or templates:read",
        "x-fomr-cost": 1,
        "responses": {
          "200": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformFormValidationResult"
                }
              }
            }
          },
          "400": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformInvalidInputError"
                }
              }
            }
          },
          "401": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformError"
                }
              }
            }
          },
          "403": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformForbiddenError"
                }
              }
            }
          },
          "404": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformNotFoundError"
                }
              }
            }
          },
          "409": {
            "description": "A form that cannot be published as it stands: it is archived, or it holds no draft. Branch on code.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformFormPublishConflictError"
                }
              }
            }
          },
          "429": {
            "description": "A rejected call. The organization budget names the policy it rejected the call under; the request floor that bounds hammering sends the envelope alone.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformThrottledErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/forms/{form_public_id}/publish": {
      "post": {
        "operationId": "publishForm",
        "summary": "Publish the draft",
        "tags": [
          "Forms"
        ],
        "description": "Publishes the stored draft and answers the form resource. A draft identical to the latest published version republishes that version number; any other draft becomes the next version. There are no preconditions: the version number is computed under the form lock, so the last call wins. Publish Validation runs first, and a draft that is not ready is refused with 422 carrying the same Publish Issues validate returns; a draft flagged by automated safety checks is refused with 422 FORM_SAFETY_REJECTED, and a token owner without a verified email with 403 FORM_PUBLISH_EMAIL_UNVERIFIED. A Private Template cannot be published and is refused with 400 INVALID_INPUT at is_template. Needs forms:write and form_publish. Costs 1 API credit.",
        "parameters": [
          {
            "schema": {
              "type": "string",
              "minLength": 10,
              "maxLength": 10,
              "pattern": "^[A-Za-z0-9_-]+$"
            },
            "in": "path",
            "name": "form_public_id",
            "required": true,
            "description": "The public ID of the form or Private Template."
          }
        ],
        "x-fomr-permission": "forms:write; form_publish",
        "x-fomr-cost": 1,
        "responses": {
          "200": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformForm"
                }
              }
            }
          },
          "400": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformInvalidInputError"
                }
              }
            }
          },
          "401": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformError"
                }
              }
            }
          },
          "402": {
            "description": "A Plan Error: either an exhausted plan limit or a field that needs a larger plan. Branch on code.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformPlanError"
                }
              }
            }
          },
          "403": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformForbiddenError"
                }
              }
            }
          },
          "404": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformNotFoundError"
                }
              }
            }
          },
          "409": {
            "description": "A form that cannot be published as it stands: it is archived, or it holds no draft. Branch on code.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformFormPublishConflictError"
                }
              }
            }
          },
          "422": {
            "description": "A publish the server refused: the draft has Publish Issues, or safety checks flagged it. Branch on code.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformFormPublishRejectedError"
                }
              }
            }
          },
          "429": {
            "description": "A rejected call. The organization budget names the policy it rejected the call under; the request floor that bounds hammering sends the envelope alone.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformThrottledErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformError"
                }
              }
            }
          },
          "503": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformServiceUnavailableError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/forms/{form_public_id}/unpublish": {
      "post": {
        "operationId": "unpublishForm",
        "summary": "Take the form offline",
        "tags": [
          "Forms"
        ],
        "description": "Takes the form offline: the share link stops serving and the draft becomes the only copy anyone can change. The published version is kept, so republishing continues the numbering. A form that is already offline answers 200 with the resource and writes nothing. A Private Template is never published and is refused with 400 INVALID_INPUT at is_template. Needs forms:write and form_publish. Costs 1 API credit.",
        "parameters": [
          {
            "schema": {
              "type": "string",
              "minLength": 10,
              "maxLength": 10,
              "pattern": "^[A-Za-z0-9_-]+$"
            },
            "in": "path",
            "name": "form_public_id",
            "required": true,
            "description": "The public ID of the form or Private Template."
          }
        ],
        "x-fomr-permission": "forms:write; form_publish",
        "x-fomr-cost": 1,
        "responses": {
          "200": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformForm"
                }
              }
            }
          },
          "400": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformInvalidInputError"
                }
              }
            }
          },
          "401": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformError"
                }
              }
            }
          },
          "403": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformForbiddenError"
                }
              }
            }
          },
          "404": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformNotFoundError"
                }
              }
            }
          },
          "429": {
            "description": "A rejected call. The organization budget names the policy it rejected the call under; the request floor that bounds hammering sends the envelope alone.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformThrottledErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformError"
                }
              }
            }
          },
          "503": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformServiceUnavailableError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/forms/{form_public_id}/close": {
      "post": {
        "operationId": "closeForm",
        "summary": "Stop accepting submissions",
        "tags": [
          "Forms"
        ],
        "description": "Stops the form accepting submissions now by setting is_closed. Any close_at or open_at schedule is left alone. A form that is already closed by hand answers 200 with the resource and writes nothing. Needs forms:write, or templates:write for a Private Template. Costs 1 API credit.",
        "parameters": [
          {
            "schema": {
              "type": "string",
              "minLength": 10,
              "maxLength": 10,
              "pattern": "^[A-Za-z0-9_-]+$"
            },
            "in": "path",
            "name": "form_public_id",
            "required": true,
            "description": "The public ID of the form or Private Template."
          }
        ],
        "x-fomr-permission": "forms:write or templates:write",
        "x-fomr-cost": 1,
        "responses": {
          "200": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformForm"
                }
              }
            }
          },
          "400": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformInvalidInputError"
                }
              }
            }
          },
          "401": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformError"
                }
              }
            }
          },
          "403": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformForbiddenError"
                }
              }
            }
          },
          "404": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformNotFoundError"
                }
              }
            }
          },
          "409": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformFormArchivedError"
                }
              }
            }
          },
          "429": {
            "description": "A rejected call. The organization budget names the policy it rejected the call under; the request floor that bounds hammering sends the envelope alone.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformThrottledErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformError"
                }
              }
            }
          },
          "503": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformServiceUnavailableError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/forms/{form_public_id}/reopen": {
      "post": {
        "operationId": "reopenForm",
        "summary": "Accept submissions again",
        "tags": [
          "Forms"
        ],
        "description": "Makes the form accept submissions again: it clears is_closed and clears whichever schedule currently holds the form closed, that is a close_at in the past or an open_at in the future. A schedule that has not taken effect yet is kept. A form that is already open answers 200 with the resource and writes nothing. Needs forms:write, or templates:write for a Private Template. Costs 1 API credit.",
        "parameters": [
          {
            "schema": {
              "type": "string",
              "minLength": 10,
              "maxLength": 10,
              "pattern": "^[A-Za-z0-9_-]+$"
            },
            "in": "path",
            "name": "form_public_id",
            "required": true,
            "description": "The public ID of the form or Private Template."
          }
        ],
        "x-fomr-permission": "forms:write or templates:write",
        "x-fomr-cost": 1,
        "responses": {
          "200": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformForm"
                }
              }
            }
          },
          "400": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformInvalidInputError"
                }
              }
            }
          },
          "401": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformError"
                }
              }
            }
          },
          "403": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformForbiddenError"
                }
              }
            }
          },
          "404": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformNotFoundError"
                }
              }
            }
          },
          "409": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformFormArchivedError"
                }
              }
            }
          },
          "429": {
            "description": "A rejected call. The organization budget names the policy it rejected the call under; the request floor that bounds hammering sends the envelope alone.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformThrottledErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformError"
                }
              }
            }
          },
          "503": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformServiceUnavailableError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/forms/{form_public_id}/access": {
      "patch": {
        "operationId": "updateFormAccess",
        "summary": "Set access and schedule",
        "tags": [
          "Forms"
        ],
        "description": "Sets whether the form takes submissions, when, and whether it blocks duplicate responses. Send only the fields you want to change: is_closed closes or opens the form by hand, close_at and open_at schedule it, null clears a schedule, and duplicate_response_rule sets or clears the duplicate-response rule. A body that changes nothing answers 200 with the resource and writes nothing. Needs forms:write, or templates:write for a Private Template. Costs 1 API credit.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ModelPlatformFormAccessUpdateInputInput"
              }
            }
          }
        },
        "parameters": [
          {
            "schema": {
              "type": "string",
              "minLength": 10,
              "maxLength": 10,
              "pattern": "^[A-Za-z0-9_-]+$"
            },
            "in": "path",
            "name": "form_public_id",
            "required": true,
            "description": "The public ID of the form or Private Template."
          }
        ],
        "x-fomr-permission": "forms:write or templates:write",
        "x-fomr-cost": 1,
        "responses": {
          "200": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformForm"
                }
              }
            }
          },
          "400": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformInvalidInputError"
                }
              }
            }
          },
          "401": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformError"
                }
              }
            }
          },
          "403": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformForbiddenError"
                }
              }
            }
          },
          "404": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformNotFoundError"
                }
              }
            }
          },
          "409": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformFormArchivedError"
                }
              }
            }
          },
          "429": {
            "description": "A rejected call. The organization budget names the policy it rejected the call under; the request floor that bounds hammering sends the envelope alone.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformThrottledErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformError"
                }
              }
            }
          },
          "503": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformServiceUnavailableError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/forms/{form_public_id}/domain": {
      "put": {
        "operationId": "setFormDomain",
        "summary": "Set the share domain",
        "tags": [
          "Domains"
        ],
        "description": "Sets the custom domain and slug of the share link, as the Share link tab of the app does. The domain must be a verified, active domain of the organization, and no other form may use the slug on it. Sending the current binding answers 200 and writes nothing. The link serves respondents once a version is published. Private Templates have no share link. Setting a domain needs the domains plan feature. Needs forms:write and domains:write. Costs 1 API credit.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ModelPlatformFormDomainUpdateInputInput"
              }
            }
          }
        },
        "parameters": [
          {
            "schema": {
              "type": "string",
              "minLength": 10,
              "maxLength": 10,
              "pattern": "^[A-Za-z0-9_-]+$"
            },
            "in": "path",
            "name": "form_public_id",
            "required": true,
            "description": "The public ID of the form or Private Template."
          }
        ],
        "x-fomr-permission": "forms:write; domains:write",
        "x-fomr-cost": 1,
        "responses": {
          "200": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformForm"
                }
              }
            }
          },
          "400": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformInvalidInputError"
                }
              }
            }
          },
          "401": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformError"
                }
              }
            }
          },
          "402": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformProFeatureError"
                }
              }
            }
          },
          "403": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformForbiddenError"
                }
              }
            }
          },
          "404": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformNotFoundError"
                }
              }
            }
          },
          "409": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformFormArchivedError"
                }
              }
            }
          },
          "429": {
            "description": "A rejected call. The organization budget names the policy it rejected the call under; the request floor that bounds hammering sends the envelope alone.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformThrottledErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformError"
                }
              }
            }
          },
          "503": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformServiceUnavailableError"
                }
              }
            }
          }
        }
      },
      "delete": {
        "operationId": "deleteFormDomain",
        "summary": "Remove the share domain",
        "tags": [
          "Domains"
        ],
        "description": "Removes the custom domain of the share link, so the form uses its fomr link again. A form without a custom domain answers 200 and writes nothing. No plan feature is needed to remove a domain. Needs forms:write and domains:write. Costs 1 API credit.",
        "parameters": [
          {
            "schema": {
              "type": "string",
              "minLength": 10,
              "maxLength": 10,
              "pattern": "^[A-Za-z0-9_-]+$"
            },
            "in": "path",
            "name": "form_public_id",
            "required": true,
            "description": "The public ID of the form or Private Template."
          }
        ],
        "x-fomr-permission": "forms:write; domains:write",
        "x-fomr-cost": 1,
        "responses": {
          "200": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformForm"
                }
              }
            }
          },
          "400": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformInvalidInputError"
                }
              }
            }
          },
          "401": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformError"
                }
              }
            }
          },
          "403": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformForbiddenError"
                }
              }
            }
          },
          "404": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformNotFoundError"
                }
              }
            }
          },
          "409": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformFormArchivedError"
                }
              }
            }
          },
          "429": {
            "description": "A rejected call. The organization budget names the policy it rejected the call under; the request floor that bounds hammering sends the envelope alone.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformThrottledErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformError"
                }
              }
            }
          },
          "503": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformServiceUnavailableError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/forms/{form_public_id}/duplicate": {
      "post": {
        "operationId": "duplicateForm",
        "summary": "Duplicate a form",
        "tags": [
          "Forms"
        ],
        "description": "Copies a form or Private Template into a new draft and answers with the copy plus its stored Draft Document under draft. Page and block IDs, the schedule, and the theme are copied; the copy is never published. Left out, is_template keeps the kind of the source, so send false against a Private Template to start a form from it: the copy then records the template lineage in source_template_public_id and counts a template use. On a plan without a Pro Feature the source uses, such as meta tags, the copy is refused with 402 PRO_FEATURE_REQUIRED naming it. Reading the source needs forms:read, or templates:read when the source is a Private Template. Needs forms:write, or templates:write for a Private Template. Costs 1 API credit.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ModelPlatformFormDuplicateInputInput"
              }
            }
          }
        },
        "parameters": [
          {
            "schema": {
              "type": "string",
              "minLength": 10,
              "maxLength": 10,
              "pattern": "^[A-Za-z0-9_-]+$"
            },
            "in": "path",
            "name": "form_public_id",
            "required": true,
            "description": "The public ID of the form or Private Template."
          }
        ],
        "x-fomr-permission": "forms:write or templates:write",
        "x-fomr-cost": 1,
        "responses": {
          "201": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformFormCreateResult"
                }
              }
            }
          },
          "400": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformInvalidInputError"
                }
              }
            }
          },
          "401": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformError"
                }
              }
            }
          },
          "402": {
            "description": "A Plan Error: either an exhausted plan limit or a field that needs a larger plan. Branch on code.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformPlanError"
                }
              }
            }
          },
          "403": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformForbiddenError"
                }
              }
            }
          },
          "404": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformNotFoundError"
                }
              }
            }
          },
          "429": {
            "description": "A rejected call. The organization budget names the policy it rejected the call under; the request floor that bounds hammering sends the envelope alone.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformThrottledErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformError"
                }
              }
            }
          },
          "503": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformServiceUnavailableError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/forms/{form_public_id}/mark-template": {
      "post": {
        "operationId": "markFormTemplate",
        "summary": "Mark a form as a Private Template",
        "tags": [
          "Templates"
        ],
        "description": "Turns a form into a Private Template in place: the public ID, the draft, and the IDs inside it are kept, and any custom domain binding is dropped. A published form is refused with 409 FORM_CONVERSION_BLOCKED and reason published, a form holding submissions with reason has_submissions; unpublish or duplicate instead. A resource that is already a Private Template answers 200 and writes nothing. Needs both forms:write and templates:write. Costs 1 API credit.",
        "parameters": [
          {
            "schema": {
              "type": "string",
              "minLength": 10,
              "maxLength": 10,
              "pattern": "^[A-Za-z0-9_-]+$"
            },
            "in": "path",
            "name": "form_public_id",
            "required": true,
            "description": "The public ID of the form or Private Template."
          }
        ],
        "x-fomr-permission": "forms:write and templates:write",
        "x-fomr-cost": 1,
        "responses": {
          "200": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformForm"
                }
              }
            }
          },
          "400": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformInvalidInputError"
                }
              }
            }
          },
          "401": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformError"
                }
              }
            }
          },
          "403": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformForbiddenError"
                }
              }
            }
          },
          "404": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformNotFoundError"
                }
              }
            }
          },
          "409": {
            "description": "A refused conversion: the form is published or holds submissions, or it is archived. Branch on code.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformFormConversionError"
                }
              }
            }
          },
          "429": {
            "description": "A rejected call. The organization budget names the policy it rejected the call under; the request floor that bounds hammering sends the envelope alone.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformThrottledErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformError"
                }
              }
            }
          },
          "503": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformServiceUnavailableError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/forms/{form_public_id}/workflows": {
      "get": {
        "operationId": "listFormWorkflows",
        "summary": "List the workflows of a form",
        "tags": [
          "Workflows"
        ],
        "description": "Lists the workflows of a form, oldest first, without their graphs: name, whether each is enabled, and the result of its last enable check. Private Templates have no workflows and answer 404. Needs forms:read and workflows:read. Costs 1 API credit.",
        "parameters": [
          {
            "schema": {
              "type": "string",
              "minLength": 10,
              "maxLength": 10,
              "pattern": "^[A-Za-z0-9_-]+$"
            },
            "in": "path",
            "name": "form_public_id",
            "required": true,
            "description": "The public ID of the form or Private Template."
          }
        ],
        "x-fomr-permission": "forms:read; workflows:read",
        "x-fomr-cost": 1,
        "responses": {
          "200": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformWorkflowList"
                }
              }
            }
          },
          "400": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformInvalidInputError"
                }
              }
            }
          },
          "401": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformError"
                }
              }
            }
          },
          "403": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformForbiddenError"
                }
              }
            }
          },
          "404": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformWorkflowNotFoundError"
                }
              }
            }
          },
          "429": {
            "description": "A rejected call. The organization budget names the policy it rejected the call under; the request floor that bounds hammering sends the envelope alone.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformThrottledErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformError"
                }
              }
            }
          }
        }
      },
      "post": {
        "operationId": "createFormWorkflow",
        "summary": "Create a workflow",
        "tags": [
          "Workflows"
        ],
        "description": "Creates a workflow on a form from a Workflow Document and answers 201 with the stored document, every minted ID included. The workflow starts disabled; call enableFormWorkflow to run it. The graph passes the same checks as the app builder, and a form holds at most 25 workflows. A google_sheets_add_row node with a config creates its spreadsheet in the connected Google account. Use dry_run=true to validate without writing. Needs forms:write and workflows:write. Costs 1 API credit.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ModelPlatformWorkflowWriteInput"
              }
            }
          }
        },
        "parameters": [
          {
            "schema": {
              "default": "false",
              "type": "string",
              "enum": [
                "true",
                "false"
              ]
            },
            "in": "query",
            "name": "dry_run",
            "required": false,
            "description": "Validate the document and resolve every ID without writing anything or creating a spreadsheet. Costs the same as a real write and answers 200 with the document the real call would have stored."
          },
          {
            "schema": {
              "type": "string",
              "minLength": 10,
              "maxLength": 10,
              "pattern": "^[A-Za-z0-9_-]+$"
            },
            "in": "path",
            "name": "form_public_id",
            "required": true,
            "description": "The public ID of the form or Private Template."
          }
        ],
        "x-fomr-permission": "forms:write; workflows:write",
        "x-fomr-cost": 1,
        "responses": {
          "200": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformWorkflowDryRunResult"
                }
              }
            }
          },
          "201": {
            "description": "The Workflow Document: a workflow of a form with its whole graph. Read it, change it, and send it back to replace it.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformWorkflow"
                }
              }
            }
          },
          "400": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformInvalidInputError"
                }
              }
            }
          },
          "401": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformError"
                }
              }
            }
          },
          "403": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformForbiddenError"
                }
              }
            }
          },
          "404": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformWorkflowNotFoundError"
                }
              }
            }
          },
          "429": {
            "description": "A rejected call. The organization budget names the policy it rejected the call under; the request floor that bounds hammering sends the envelope alone.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformThrottledErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformError"
                }
              }
            }
          },
          "503": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformServiceUnavailableError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/forms/{form_public_id}/workflows/{workflow_public_id}": {
      "get": {
        "operationId": "getFormWorkflow",
        "summary": "Read a workflow",
        "tags": [
          "Workflows"
        ],
        "description": "Reads the Workflow Document: the workflow with every node and edge as the app workflow builder stores them. Send it back, changed, to replaceFormWorkflow. Integration credentials never appear in it. Needs forms:read and workflows:read. Costs 1 API credit.",
        "parameters": [
          {
            "schema": {
              "type": "string",
              "minLength": 10,
              "maxLength": 10,
              "pattern": "^[A-Za-z0-9_-]+$"
            },
            "in": "path",
            "name": "form_public_id",
            "required": true,
            "description": "The public ID of the form the workflow belongs to."
          },
          {
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 22,
              "pattern": "^[A-Za-z0-9_-]+$"
            },
            "in": "path",
            "name": "workflow_public_id",
            "required": true,
            "description": "The public ID of the workflow, as listFormWorkflows returns it."
          }
        ],
        "x-fomr-permission": "forms:read; workflows:read",
        "x-fomr-cost": 1,
        "responses": {
          "200": {
            "description": "The Workflow Document: a workflow of a form with its whole graph. Read it, change it, and send it back to replace it.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformWorkflow"
                }
              }
            }
          },
          "400": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformInvalidInputError"
                }
              }
            }
          },
          "401": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformError"
                }
              }
            }
          },
          "403": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformForbiddenError"
                }
              }
            }
          },
          "404": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformWorkflowNotFoundError"
                }
              }
            }
          },
          "429": {
            "description": "A rejected call. The organization budget names the policy it rejected the call under; the request floor that bounds hammering sends the envelope alone.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformThrottledErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformError"
                }
              }
            }
          }
        }
      },
      "put": {
        "operationId": "replaceFormWorkflow",
        "summary": "Replace a workflow",
        "tags": [
          "Workflows"
        ],
        "description": "Replaces the name and graph of a workflow with the Workflow Document you send and answers the stored document. Nodes and edges are matched by public ID and kept in place; an item without an ID is created; a stored item you leave out is removed. An enabled workflow can be renamed, but its nodes and edges change only once it is disabled, as in the app. A document identical to the stored one writes nothing. Use dry_run=true to validate without writing. Needs forms:write and workflows:write. Costs 1 API credit.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ModelPlatformWorkflowWriteInput"
              }
            }
          }
        },
        "parameters": [
          {
            "schema": {
              "default": "false",
              "type": "string",
              "enum": [
                "true",
                "false"
              ]
            },
            "in": "query",
            "name": "dry_run",
            "required": false,
            "description": "Validate the document and resolve every ID without writing anything or creating a spreadsheet. Costs the same as a real write and answers 200 with the document the real call would have stored."
          },
          {
            "schema": {
              "type": "string",
              "minLength": 10,
              "maxLength": 10,
              "pattern": "^[A-Za-z0-9_-]+$"
            },
            "in": "path",
            "name": "form_public_id",
            "required": true,
            "description": "The public ID of the form the workflow belongs to."
          },
          {
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 22,
              "pattern": "^[A-Za-z0-9_-]+$"
            },
            "in": "path",
            "name": "workflow_public_id",
            "required": true,
            "description": "The public ID of the workflow, as listFormWorkflows returns it."
          }
        ],
        "x-fomr-permission": "forms:write; workflows:write",
        "x-fomr-cost": 1,
        "responses": {
          "200": {
            "description": "The Workflow Document: a workflow of a form with its whole graph. Read it, change it, and send it back to replace it.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformWorkflow"
                }
              }
            }
          },
          "400": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformInvalidInputError"
                }
              }
            }
          },
          "401": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformError"
                }
              }
            }
          },
          "403": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformForbiddenError"
                }
              }
            }
          },
          "404": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformWorkflowNotFoundError"
                }
              }
            }
          },
          "429": {
            "description": "A rejected call. The organization budget names the policy it rejected the call under; the request floor that bounds hammering sends the envelope alone.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformThrottledErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformError"
                }
              }
            }
          },
          "503": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformServiceUnavailableError"
                }
              }
            }
          }
        }
      },
      "delete": {
        "operationId": "deleteFormWorkflow",
        "summary": "Delete a workflow",
        "tags": [
          "Workflows"
        ],
        "description": "Deletes a workflow, as deleting it in the app does. An enabled workflow is turned off first. Its run history stays, and the spreadsheets it created stay in Google Sheets. A deleted workflow cannot be restored, and its public IDs are not reused. Needs forms:write and workflows:write. Costs 1 API credit.",
        "parameters": [
          {
            "schema": {
              "type": "string",
              "minLength": 10,
              "maxLength": 10,
              "pattern": "^[A-Za-z0-9_-]+$"
            },
            "in": "path",
            "name": "form_public_id",
            "required": true,
            "description": "The public ID of the form the workflow belongs to."
          },
          {
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 22,
              "pattern": "^[A-Za-z0-9_-]+$"
            },
            "in": "path",
            "name": "workflow_public_id",
            "required": true,
            "description": "The public ID of the workflow, as listFormWorkflows returns it."
          }
        ],
        "x-fomr-permission": "forms:write; workflows:write",
        "x-fomr-cost": 1,
        "responses": {
          "204": {
            "description": "Default Response"
          },
          "400": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformInvalidInputError"
                }
              }
            }
          },
          "401": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformError"
                }
              }
            }
          },
          "403": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformForbiddenError"
                }
              }
            }
          },
          "404": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformWorkflowNotFoundError"
                }
              }
            }
          },
          "429": {
            "description": "A rejected call. The organization budget names the policy it rejected the call under; the request floor that bounds hammering sends the envelope alone.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformThrottledErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformError"
                }
              }
            }
          },
          "503": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformServiceUnavailableError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/forms/{form_public_id}/workflows/{workflow_public_id}/enable": {
      "post": {
        "operationId": "enableFormWorkflow",
        "summary": "Enable a workflow",
        "tags": [
          "Workflows"
        ],
        "description": "Turns the workflow on so it runs when a respondent completes the form, after the checks the app runs: one trigger, every node connected to it, no loops, a valid config and a connected account on every step. A failed check answers 400 with the issue at its path in the Workflow Document and records validation_status invalid, as in the app. The plan caps enabled workflows per form with max_active_workflows_per_form; over it the call answers 402. An enabled workflow that passed its checks answers 200 and writes nothing. Needs forms:write and workflows:write. Costs 1 API credit.",
        "parameters": [
          {
            "schema": {
              "type": "string",
              "minLength": 10,
              "maxLength": 10,
              "pattern": "^[A-Za-z0-9_-]+$"
            },
            "in": "path",
            "name": "form_public_id",
            "required": true,
            "description": "The public ID of the form the workflow belongs to."
          },
          {
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 22,
              "pattern": "^[A-Za-z0-9_-]+$"
            },
            "in": "path",
            "name": "workflow_public_id",
            "required": true,
            "description": "The public ID of the workflow, as listFormWorkflows returns it."
          }
        ],
        "x-fomr-permission": "forms:write; workflows:write",
        "x-fomr-cost": 1,
        "responses": {
          "200": {
            "description": "The Workflow Document: a workflow of a form with its whole graph. Read it, change it, and send it back to replace it.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformWorkflow"
                }
              }
            }
          },
          "400": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformInvalidInputError"
                }
              }
            }
          },
          "401": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformError"
                }
              }
            }
          },
          "402": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformPlanLimitError"
                }
              }
            }
          },
          "403": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformForbiddenError"
                }
              }
            }
          },
          "404": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformWorkflowNotFoundError"
                }
              }
            }
          },
          "429": {
            "description": "A rejected call. The organization budget names the policy it rejected the call under; the request floor that bounds hammering sends the envelope alone.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformThrottledErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformError"
                }
              }
            }
          },
          "503": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformServiceUnavailableError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/forms/{form_public_id}/workflows/{workflow_public_id}/disable": {
      "post": {
        "operationId": "disableFormWorkflow",
        "summary": "Disable a workflow",
        "tags": [
          "Workflows"
        ],
        "description": "Turns the workflow off, as pausing it in the app does: later completed responses no longer run it. Its graph can then be replaced. A workflow that is already disabled answers 200 and writes nothing. Needs forms:write and workflows:write. Costs 1 API credit.",
        "parameters": [
          {
            "schema": {
              "type": "string",
              "minLength": 10,
              "maxLength": 10,
              "pattern": "^[A-Za-z0-9_-]+$"
            },
            "in": "path",
            "name": "form_public_id",
            "required": true,
            "description": "The public ID of the form the workflow belongs to."
          },
          {
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 22,
              "pattern": "^[A-Za-z0-9_-]+$"
            },
            "in": "path",
            "name": "workflow_public_id",
            "required": true,
            "description": "The public ID of the workflow, as listFormWorkflows returns it."
          }
        ],
        "x-fomr-permission": "forms:write; workflows:write",
        "x-fomr-cost": 1,
        "responses": {
          "200": {
            "description": "The Workflow Document: a workflow of a form with its whole graph. Read it, change it, and send it back to replace it.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformWorkflow"
                }
              }
            }
          },
          "400": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformInvalidInputError"
                }
              }
            }
          },
          "401": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformError"
                }
              }
            }
          },
          "403": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformForbiddenError"
                }
              }
            }
          },
          "404": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformWorkflowNotFoundError"
                }
              }
            }
          },
          "429": {
            "description": "A rejected call. The organization budget names the policy it rejected the call under; the request floor that bounds hammering sends the envelope alone.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformThrottledErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformError"
                }
              }
            }
          },
          "503": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformServiceUnavailableError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/integration-connections": {
      "get": {
        "operationId": "listIntegrationConnections",
        "summary": "List integration connections",
        "tags": [
          "Workflows"
        ],
        "description": "Lists the integration connections of the organization that workflow nodes can reference, most recently updated first, with the connected account and its status. Connections are made and reconnected in the app; tokens and other credentials are never returned. Needs forms:read and workflows:read, or integration_management. Costs 1 API credit.",
        "x-fomr-permission": "integration_management or forms:read and workflows:read",
        "x-fomr-cost": 1,
        "responses": {
          "200": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformIntegrationConnectionList"
                }
              }
            }
          },
          "401": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformError"
                }
              }
            }
          },
          "403": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformForbiddenError"
                }
              }
            }
          },
          "429": {
            "description": "A rejected call. The organization budget names the policy it rejected the call under; the request floor that bounds hammering sends the envelope alone.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformThrottledErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Default Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelPlatformError"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "securitySchemes": {
      "bearerAuth": {
        "type": "http",
        "scheme": "bearer",
        "bearerFormat": "Personal Access Token",
        "description": "Every request sends a Personal Access Token in the Authorization header: `Authorization: Bearer fomrt_…`. Create a token in the Fomr app under **Settings > API**; it is shown only once. See [Authentication](https://fomr.io/help/api/authentication) for creating, rotating, and revoking tokens."
      }
    },
    "schemas": {
      "ModelCalculatedValueDeclaration": {
        "type": "object",
        "properties": {
          "public_id": {
            "description": "Public ID of the Calculated value, unique within the form. 1-22 URL-safe characters.",
            "$ref": "#/components/schemas/ModelCalculatedValuePublicId"
          },
          "name": {
            "description": "Name shown in the editor and in formulas. Unique within the form.",
            "$ref": "#/components/schemas/ModelCalculatedValueName"
          },
          "type": {
            "description": "Whether the value holds a number or text.",
            "$ref": "#/components/schemas/ModelCalculatedValueType"
          },
          "initial_value": {
            "description": "The starting value as a string. Defaults to 0 for numbers and empty text.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelCalculatedValueInitialValue"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "public_id",
          "name",
          "type"
        ]
      },
      "ModelCalculatedValueDeclarations": {
        "maxItems": 50,
        "type": "array",
        "items": {
          "$ref": "#/components/schemas/ModelCalculatedValueDeclaration"
        }
      },
      "ModelCalculatedValueInitialValue": {
        "type": "string",
        "maxLength": 500
      },
      "ModelCalculatedValueInitialValueInput": {
        "type": "string",
        "maxLength": 500
      },
      "ModelCalculatedValueName": {
        "type": "string",
        "minLength": 1,
        "maxLength": 50
      },
      "ModelCalculatedValueNameInput": {
        "type": "string",
        "minLength": 1,
        "maxLength": 50
      },
      "ModelCalculatedValuePublicId": {
        "type": "string",
        "minLength": 1,
        "maxLength": 22,
        "pattern": "^[A-Za-z0-9_-]+$"
      },
      "ModelCalculatedValuePublicIdInput": {
        "type": "string",
        "minLength": 1,
        "maxLength": 22,
        "pattern": "^[A-Za-z0-9_-]+$"
      },
      "ModelCalculatedValueType": {
        "type": "string",
        "enum": [
          "number",
          "text"
        ]
      },
      "ModelCalculatedValueTypeInput": {
        "type": "string",
        "enum": [
          "number",
          "text"
        ]
      },
      "ModelDate": {
        "type": "string",
        "format": "date-time",
        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
      },
      "ModelDateInput": {
        "type": "string",
        "format": "date-time",
        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
      },
      "ModelDomainHost": {
        "type": "string",
        "minLength": 4,
        "maxLength": 55,
        "pattern": "^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9])\\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9-]*[A-Za-z0-9])$"
      },
      "ModelDomainHostInput": {
        "type": "string",
        "minLength": 4,
        "maxLength": 55,
        "pattern": "^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9])\\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9-]*[A-Za-z0-9])$"
      },
      "ModelDomainSlug": {
        "type": "string",
        "minLength": 1,
        "maxLength": 100,
        "pattern": "^[a-zA-Z0-9-_/-]+$"
      },
      "ModelDomainStatus": {
        "type": "string",
        "enum": [
          "verified",
          "pending",
          "failed"
        ]
      },
      "ModelFormPublicId": {
        "type": "string",
        "minLength": 10,
        "maxLength": 10,
        "pattern": "^[A-Za-z0-9_-]+$"
      },
      "ModelFormPublicIdInput": {
        "type": "string",
        "minLength": 10,
        "maxLength": 10,
        "pattern": "^[A-Za-z0-9_-]+$"
      },
      "ModelHiddenValueCapturedValues": {
        "type": "object",
        "propertyNames": {
          "type": "string"
        },
        "additionalProperties": {
          "type": "string",
          "maxLength": 500
        }
      },
      "ModelHiddenValueDeclaration": {
        "type": "object",
        "properties": {
          "key": {
            "description": "Key of the hidden value: lowercase letters, digits, underscores, and hyphens, starting with a letter.",
            "$ref": "#/components/schemas/ModelHiddenValueKey"
          },
          "default_value": {
            "description": "Value used when the respondent's URL does not supply the key.",
            "anyOf": [
              {
                "type": "string",
                "maxLength": 500
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "key"
        ]
      },
      "ModelHiddenValueDeclarations": {
        "maxItems": 50,
        "type": "array",
        "items": {
          "$ref": "#/components/schemas/ModelHiddenValueDeclaration"
        }
      },
      "ModelHiddenValueKey": {
        "type": "string",
        "minLength": 1,
        "maxLength": 100,
        "pattern": "^[a-z][a-z0-9_-]*$"
      },
      "ModelHiddenValueKeyInput": {
        "type": "string",
        "minLength": 1,
        "maxLength": 100,
        "pattern": "^[a-z][a-z0-9_-]*$"
      },
      "ModelIntegrationConnectionStatus": {
        "type": "string",
        "enum": [
          "connected",
          "invalid",
          "disconnected"
        ]
      },
      "ModelLogicAction": {
        "oneOf": [
          {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1,
                "maxLength": 22,
                "pattern": "^[A-Za-z0-9_-]+$",
                "description": "ID of this item, unique within the rule. 1-22 URL-safe characters."
              },
              "type": {
                "type": "string",
                "const": "show",
                "description": "Shows the target. A show target starts hidden until a matching rule shows it."
              },
              "target": {
                "description": "The block or page to show.",
                "$ref": "#/components/schemas/ModelLogicTarget"
              }
            },
            "required": [
              "id",
              "type",
              "target"
            ]
          },
          {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1,
                "maxLength": 22,
                "pattern": "^[A-Za-z0-9_-]+$",
                "description": "ID of this item, unique within the rule. 1-22 URL-safe characters."
              },
              "type": {
                "type": "string",
                "const": "hide",
                "description": "Hides the target."
              },
              "target": {
                "description": "The block or page to hide.",
                "$ref": "#/components/schemas/ModelLogicTarget"
              }
            },
            "required": [
              "id",
              "type",
              "target"
            ]
          },
          {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1,
                "maxLength": 22,
                "pattern": "^[A-Za-z0-9_-]+$",
                "description": "ID of this item, unique within the rule. 1-22 URL-safe characters."
              },
              "type": {
                "type": "string",
                "const": "require",
                "description": "Makes the question required."
              },
              "node_public_id": {
                "type": "string",
                "minLength": 1,
                "maxLength": 22,
                "pattern": "^[A-Za-z0-9_-]+$",
                "description": "Public ID of the question to require."
              }
            },
            "required": [
              "id",
              "type",
              "node_public_id"
            ]
          },
          {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1,
                "maxLength": 22,
                "pattern": "^[A-Za-z0-9_-]+$",
                "description": "ID of this item, unique within the rule. 1-22 URL-safe characters."
              },
              "type": {
                "type": "string",
                "const": "optional",
                "description": "Makes the question optional."
              },
              "node_public_id": {
                "type": "string",
                "minLength": 1,
                "maxLength": 22,
                "pattern": "^[A-Za-z0-9_-]+$",
                "description": "Public ID of the question to make optional."
              }
            },
            "required": [
              "id",
              "type",
              "node_public_id"
            ]
          },
          {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1,
                "maxLength": 22,
                "pattern": "^[A-Za-z0-9_-]+$",
                "description": "ID of this item, unique within the rule. 1-22 URL-safe characters."
              },
              "type": {
                "type": "string",
                "const": "jump",
                "description": "Skips ahead when the respondent advances. Jumps only go forward."
              },
              "to_page_public_id": {
                "type": "string",
                "minLength": 1,
                "maxLength": 22,
                "pattern": "^[A-Za-z0-9_-]+$",
                "description": "Public ID of a later question page or of an ending."
              }
            },
            "required": [
              "id",
              "type",
              "to_page_public_id"
            ]
          },
          {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1,
                "maxLength": 22,
                "pattern": "^[A-Za-z0-9_-]+$",
                "description": "ID of this item, unique within the rule. 1-22 URL-safe characters."
              },
              "type": {
                "type": "string",
                "const": "calculate",
                "description": "Sets a number Calculated value from a formula."
              },
              "calculated_value_public_id": {
                "description": "Public ID of the Calculated value this action updates.",
                "$ref": "#/components/schemas/ModelCalculatedValuePublicId"
              },
              "formula": {
                "type": "string",
                "maxLength": 1000,
                "description": "Arithmetic formula over answers and Calculated values."
              }
            },
            "required": [
              "id",
              "type",
              "calculated_value_public_id",
              "formula"
            ]
          },
          {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1,
                "maxLength": 22,
                "pattern": "^[A-Za-z0-9_-]+$",
                "description": "ID of this item, unique within the rule. 1-22 URL-safe characters."
              },
              "type": {
                "type": "string",
                "const": "redirect",
                "description": "Redirects the respondent to a URL after an ending. Needs the Pro plan."
              },
              "url": {
                "type": "string",
                "maxLength": 1000,
                "description": "The URL to redirect to. Pipes are allowed."
              }
            },
            "required": [
              "id",
              "type",
              "url"
            ]
          },
          {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1,
                "maxLength": 22,
                "pattern": "^[A-Za-z0-9_-]+$",
                "description": "ID of this item, unique within the rule. 1-22 URL-safe characters."
              },
              "type": {
                "type": "string",
                "const": "update_text",
                "description": "Updates a text Calculated value."
              },
              "calculated_value_public_id": {
                "description": "Public ID of the Calculated value this action updates.",
                "$ref": "#/components/schemas/ModelCalculatedValuePublicId"
              },
              "operation": {
                "type": "string",
                "enum": [
                  "replace",
                  "append",
                  "prepend"
                ],
                "description": "Whether the text replaces the value, is appended to it, or is prepended to it."
              },
              "text": {
                "type": "string",
                "maxLength": 1000,
                "description": "The text to write. Pipes are allowed."
              }
            },
            "required": [
              "id",
              "type",
              "calculated_value_public_id",
              "operation",
              "text"
            ]
          }
        ]
      },
      "ModelLogicActions": {
        "maxItems": 20,
        "type": "array",
        "items": {
          "$ref": "#/components/schemas/ModelLogicAction"
        }
      },
      "ModelLogicCondition": {
        "type": "object",
        "properties": {
          "kind": {
            "type": "string",
            "const": "condition",
            "description": "Marks a single condition."
          },
          "id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 22,
            "pattern": "^[A-Za-z0-9_-]+$",
            "description": "ID of this item, unique within the rule. 1-22 URL-safe characters."
          },
          "subject": {
            "description": "The answer, Hidden value, Calculated value, page, or ending that is tested.",
            "$ref": "#/components/schemas/ModelLogicConditionSubject"
          },
          "operator": {
            "description": "How the subject is compared. The allowed operators depend on the subject type.",
            "$ref": "#/components/schemas/ModelLogicOperator"
          },
          "value": {
            "description": "The value to compare against: text, a number, or a list of option values. Empty for presence operators.",
            "$ref": "#/components/schemas/ModelLogicConditionValue"
          }
        },
        "required": [
          "kind",
          "id",
          "subject",
          "operator"
        ]
      },
      "ModelLogicConditionGroup": {
        "type": "object",
        "properties": {
          "kind": {
            "type": "string",
            "const": "group",
            "description": "Marks a group of conditions."
          },
          "id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 22,
            "pattern": "^[A-Za-z0-9_-]+$",
            "description": "ID of this item, unique within the rule. 1-22 URL-safe characters."
          },
          "match": {
            "description": "Whether all or any of the grouped conditions must match.",
            "$ref": "#/components/schemas/ModelLogicMatch"
          },
          "conditions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ModelLogicCondition"
            },
            "description": "The grouped conditions. Groups do not nest."
          }
        },
        "required": [
          "kind",
          "id",
          "match",
          "conditions"
        ]
      },
      "ModelLogicConditionItem": {
        "oneOf": [
          {
            "$ref": "#/components/schemas/ModelLogicCondition"
          },
          {
            "$ref": "#/components/schemas/ModelLogicConditionGroup"
          }
        ]
      },
      "ModelLogicConditionSubject": {
        "oneOf": [
          {
            "type": "object",
            "properties": {
              "type": {
                "type": "string",
                "const": "answer",
                "description": "What the condition tests."
              },
              "node_public_id": {
                "type": "string",
                "minLength": 1,
                "maxLength": 22,
                "pattern": "^[A-Za-z0-9_-]+$",
                "description": "Public ID of the question whose answer is tested."
              }
            },
            "required": [
              "type",
              "node_public_id"
            ]
          },
          {
            "type": "object",
            "properties": {
              "type": {
                "type": "string",
                "const": "hidden_value",
                "description": "What the condition tests."
              },
              "key": {
                "description": "Key of the Hidden value that is tested.",
                "$ref": "#/components/schemas/ModelHiddenValueKey"
              }
            },
            "required": [
              "type",
              "key"
            ]
          },
          {
            "type": "object",
            "properties": {
              "type": {
                "type": "string",
                "const": "calculated_value",
                "description": "What the condition tests."
              },
              "calculated_value_public_id": {
                "description": "Public ID of the Calculated value that is tested.",
                "$ref": "#/components/schemas/ModelCalculatedValuePublicId"
              }
            },
            "required": [
              "type",
              "calculated_value_public_id"
            ]
          },
          {
            "type": "object",
            "properties": {
              "type": {
                "type": "string",
                "const": "page",
                "description": "What the condition tests."
              },
              "page_public_id": {
                "type": "string",
                "minLength": 1,
                "maxLength": 22,
                "pattern": "^[A-Za-z0-9_-]+$",
                "description": "Public ID of the page the respondent must have visited."
              }
            },
            "required": [
              "type",
              "page_public_id"
            ]
          },
          {
            "type": "object",
            "properties": {
              "type": {
                "type": "string",
                "const": "ending",
                "description": "Matches once the respondent reaches an ending."
              }
            },
            "required": [
              "type"
            ]
          }
        ]
      },
      "ModelLogicConditionValue": {
        "anyOf": [
          {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 500
              },
              {
                "type": "number"
              },
              {
                "maxItems": 100,
                "type": "array",
                "items": {
                  "type": "string",
                  "maxLength": 500
                }
              }
            ]
          },
          {
            "type": "null"
          }
        ]
      },
      "ModelLogicConditions": {
        "type": "object",
        "properties": {
          "match": {
            "description": "Whether all or any of the items must match. A rule without items always applies.",
            "$ref": "#/components/schemas/ModelLogicMatch"
          },
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ModelLogicConditionItem"
            },
            "description": "Conditions and condition groups."
          }
        },
        "required": [
          "match",
          "items"
        ]
      },
      "ModelLogicMatch": {
        "type": "string",
        "enum": [
          "all",
          "any"
        ]
      },
      "ModelLogicMatchInput": {
        "type": "string",
        "enum": [
          "all",
          "any"
        ]
      },
      "ModelLogicOperator": {
        "type": "string",
        "enum": [
          "is",
          "is_not",
          "contains",
          "not_contains",
          "starts_with",
          "ends_with",
          "is_empty",
          "is_not_empty",
          "eq",
          "neq",
          "gt",
          "gte",
          "lt",
          "lte",
          "is_any_of",
          "is_none_of",
          "is_all_of",
          "is_true",
          "is_false",
          "is_before",
          "is_after",
          "was_visited",
          "was_not_visited"
        ]
      },
      "ModelLogicOperatorInput": {
        "type": "string",
        "enum": [
          "is",
          "is_not",
          "contains",
          "not_contains",
          "starts_with",
          "ends_with",
          "is_empty",
          "is_not_empty",
          "eq",
          "neq",
          "gt",
          "gte",
          "lt",
          "lte",
          "is_any_of",
          "is_none_of",
          "is_all_of",
          "is_true",
          "is_false",
          "is_before",
          "is_after",
          "was_visited",
          "was_not_visited"
        ]
      },
      "ModelLogicRule": {
        "type": "object",
        "properties": {
          "public_id": {
            "description": "Public ID of the rule, unique within the form. 1-22 URL-safe characters.",
            "$ref": "#/components/schemas/ModelLogicRulePublicId"
          },
          "conditions": {
            "description": "When the rule applies.",
            "$ref": "#/components/schemas/ModelLogicConditions"
          },
          "actions": {
            "description": "What the rule does when it applies, in order.",
            "$ref": "#/components/schemas/ModelLogicActions"
          }
        },
        "required": [
          "public_id",
          "conditions",
          "actions"
        ]
      },
      "ModelLogicRulePublicId": {
        "type": "string",
        "minLength": 1,
        "maxLength": 22,
        "pattern": "^[A-Za-z0-9_-]+$"
      },
      "ModelLogicRulePublicIdInput": {
        "type": "string",
        "minLength": 1,
        "maxLength": 22,
        "pattern": "^[A-Za-z0-9_-]+$"
      },
      "ModelLogicRules": {
        "maxItems": 100,
        "type": "array",
        "items": {
          "$ref": "#/components/schemas/ModelLogicRule"
        }
      },
      "ModelLogicTarget": {
        "oneOf": [
          {
            "type": "object",
            "properties": {
              "kind": {
                "type": "string",
                "const": "node",
                "description": "Targets one block."
              },
              "node_public_id": {
                "type": "string",
                "minLength": 1,
                "maxLength": 22,
                "pattern": "^[A-Za-z0-9_-]+$",
                "description": "Public ID of the block to show or hide."
              }
            },
            "required": [
              "kind",
              "node_public_id"
            ]
          },
          {
            "type": "object",
            "properties": {
              "kind": {
                "type": "string",
                "const": "page",
                "description": "Targets a whole question page."
              },
              "page_public_id": {
                "type": "string",
                "minLength": 1,
                "maxLength": 22,
                "pattern": "^[A-Za-z0-9_-]+$",
                "description": "Public ID of the question page to show or hide."
              }
            },
            "required": [
              "kind",
              "page_public_id"
            ]
          }
        ]
      },
      "ModelNodeMetaActions": {
        "type": "object",
        "properties": {
          "label": {
            "description": "Text of the page's primary button.",
            "type": "string"
          },
          "is_page_actions_override": {
            "description": "Whether this page overrides the theme's button behavior (back button, arrows, and alignment).",
            "default": false,
            "type": "boolean"
          },
          "show_back_button": {
            "description": "Whether the Back button is shown; applies only when the page overrides the theme.",
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ]
          },
          "back_button_label": {
            "description": "Text of the Back button.",
            "default": "Back",
            "type": "string"
          },
          "show_button_arrows": {
            "description": "Whether the buttons show directional arrows; applies only when the page overrides the theme.",
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ]
          },
          "action_button_alignment": {
            "description": "Horizontal alignment of the buttons: left, center, right, or justify; applies only when the page overrides the theme.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelNodeMetaAlignment"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "label",
          "is_page_actions_override",
          "back_button_label"
        ],
        "description": "Content and settings of the page button row."
      },
      "ModelNodeMetaAlignment": {
        "type": "string",
        "enum": [
          "left",
          "center",
          "right",
          "justify"
        ]
      },
      "ModelNodeMetaCheckbox": {
        "type": "object",
        "properties": {
          "supporting_content_column_count": {
            "description": "Number of supporting content columns under the question: 1 when the question hosts text, images, or dividers, otherwise null.",
            "anyOf": [
              {
                "type": "number",
                "const": 1
              },
              {
                "type": "null"
              }
            ]
          },
          "supporting_content_column_0_alignment": {
            "description": "Vertical alignment of the supporting content column: top, middle, or bottom.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelNodeMetaColumnAlignment"
              },
              {
                "type": "null"
              }
            ]
          },
          "question": {
            "description": "The question text shown to respondents, as inline rich text HTML.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "placeholder": {
            "description": "Placeholder text shown inside the empty input.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "default_value": {
            "$ref": "#/components/schemas/ModelNodeMetaDefaultValueBoolean"
          },
          "validation": {
            "$ref": "#/components/schemas/ModelNodeMetaValidation"
          }
        },
        "required": [
          "validation"
        ],
        "description": "Content and settings of a Checkbox question."
      },
      "ModelNodeMetaCheckboxChoice": {
        "type": "object",
        "properties": {
          "supporting_content_column_count": {
            "description": "Number of supporting content columns under the question: 1 when the question hosts text, images, or dividers, otherwise null.",
            "anyOf": [
              {
                "type": "number",
                "const": 1
              },
              {
                "type": "null"
              }
            ]
          },
          "supporting_content_column_0_alignment": {
            "description": "Vertical alignment of the supporting content column: top, middle, or bottom.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelNodeMetaColumnAlignment"
              },
              {
                "type": "null"
              }
            ]
          },
          "question": {
            "description": "The question text shown to respondents, as inline rich text HTML.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "select_options_data": {
            "description": "Selectable options in display order.",
            "maxItems": 1000,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ModelNodeMetaSelectOptionsData"
            }
          },
          "select_options_randomize": {
            "description": "Whether the options are shuffled for each respondent.",
            "type": "boolean"
          },
          "select_options_selection": {
            "$ref": "#/components/schemas/ModelNodeMetaSelectOptionsSelection"
          },
          "select_options_style": {
            "$ref": "#/components/schemas/ModelNodeMetaSelectOptionsStyle"
          },
          "select_options_layout": {
            "$ref": "#/components/schemas/ModelNodeMetaSelectOptionsLayout"
          },
          "is_select_options_layout_override": {
            "description": "Whether this question overrides the theme's option layout.",
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ]
          },
          "select_options_colored": {
            "description": "Whether the options are painted with the theme's option colors; null follows the theme.",
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ]
          },
          "select_options_other_placeholder": {
            "description": "Placeholder of the free-text field shown when the Other option is selected.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "default_value": {
            "$ref": "#/components/schemas/ModelNodeMetaDefaultValueSelect"
          },
          "validation": {
            "$ref": "#/components/schemas/ModelNodeMetaValidation"
          }
        },
        "required": [
          "select_options_data",
          "select_options_randomize",
          "validation"
        ],
        "description": "Content and settings of a Checkboxes question."
      },
      "ModelNodeMetaColumnAlignment": {
        "type": "string",
        "enum": [
          "top",
          "middle",
          "bottom"
        ]
      },
      "ModelNodeMetaDatePicker": {
        "type": "object",
        "properties": {
          "supporting_content_column_count": {
            "description": "Number of supporting content columns under the question: 1 when the question hosts text, images, or dividers, otherwise null.",
            "anyOf": [
              {
                "type": "number",
                "const": 1
              },
              {
                "type": "null"
              }
            ]
          },
          "supporting_content_column_0_alignment": {
            "description": "Vertical alignment of the supporting content column: top, middle, or bottom.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelNodeMetaColumnAlignment"
              },
              {
                "type": "null"
              }
            ]
          },
          "question": {
            "description": "The question text shown to respondents, as inline rich text HTML.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "placeholder": {
            "description": "Placeholder text shown inside the empty input.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "date_format": {
            "$ref": "#/components/schemas/ModelNodeMetaDatePickerFormat"
          },
          "date_range": {
            "type": "object",
            "properties": {
              "min": {
                "description": "Earliest selectable date, or null.",
                "anyOf": [
                  {
                    "$ref": "#/components/schemas/ModelDate"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "max": {
                "description": "Latest selectable date, or null.",
                "anyOf": [
                  {
                    "$ref": "#/components/schemas/ModelDate"
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            },
            "description": "Earliest and latest selectable dates as ISO 8601 timestamps; null leaves a bound open."
          },
          "default_value": {
            "$ref": "#/components/schemas/ModelNodeMetaDefaultValueDate"
          },
          "validation": {
            "$ref": "#/components/schemas/ModelNodeMetaValidation"
          }
        },
        "required": [
          "date_format",
          "date_range",
          "validation"
        ],
        "description": "Content and settings of a Date question."
      },
      "ModelNodeMetaDatePickerFormat": {
        "description": "Display format of dates, for example DD/MM/YYYY.",
        "type": "string",
        "enum": [
          "DD/MM/YYYY",
          "MM/DD/YYYY",
          "YYYY/MM/DD",
          "MMMM D, YYYY",
          "DD MMMM YYYY"
        ]
      },
      "ModelNodeMetaDateRangePicker": {
        "type": "object",
        "properties": {
          "supporting_content_column_count": {
            "description": "Number of supporting content columns under the question: 1 when the question hosts text, images, or dividers, otherwise null.",
            "anyOf": [
              {
                "type": "number",
                "const": 1
              },
              {
                "type": "null"
              }
            ]
          },
          "supporting_content_column_0_alignment": {
            "description": "Vertical alignment of the supporting content column: top, middle, or bottom.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelNodeMetaColumnAlignment"
              },
              {
                "type": "null"
              }
            ]
          },
          "question": {
            "description": "The question text shown to respondents, as inline rich text HTML.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "placeholder": {
            "description": "Placeholder text shown inside the empty input.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "date_format": {
            "$ref": "#/components/schemas/ModelNodeMetaDatePickerFormat"
          },
          "date_range": {
            "type": "object",
            "properties": {
              "min": {
                "description": "Earliest selectable date, or null.",
                "anyOf": [
                  {
                    "$ref": "#/components/schemas/ModelDate"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "max": {
                "description": "Latest selectable date, or null.",
                "anyOf": [
                  {
                    "$ref": "#/components/schemas/ModelDate"
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            },
            "description": "Earliest and latest selectable dates as ISO 8601 timestamps; null leaves a bound open."
          },
          "validation": {
            "$ref": "#/components/schemas/ModelNodeMetaValidation"
          }
        },
        "required": [
          "date_format",
          "date_range",
          "validation"
        ],
        "description": "Content and settings of a Date Range question."
      },
      "ModelNodeMetaDateTimePicker": {
        "type": "object",
        "properties": {
          "supporting_content_column_count": {
            "description": "Number of supporting content columns under the question: 1 when the question hosts text, images, or dividers, otherwise null.",
            "anyOf": [
              {
                "type": "number",
                "const": 1
              },
              {
                "type": "null"
              }
            ]
          },
          "supporting_content_column_0_alignment": {
            "description": "Vertical alignment of the supporting content column: top, middle, or bottom.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelNodeMetaColumnAlignment"
              },
              {
                "type": "null"
              }
            ]
          },
          "question": {
            "description": "The question text shown to respondents, as inline rich text HTML.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "placeholder": {
            "description": "Placeholder text shown inside the empty input.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "date_format": {
            "$ref": "#/components/schemas/ModelNodeMetaDatePickerFormat"
          },
          "date_range": {
            "type": "object",
            "properties": {
              "min": {
                "description": "Earliest selectable date, or null.",
                "anyOf": [
                  {
                    "$ref": "#/components/schemas/ModelDate"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "max": {
                "description": "Latest selectable date, or null.",
                "anyOf": [
                  {
                    "$ref": "#/components/schemas/ModelDate"
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            },
            "description": "Earliest and latest selectable dates as ISO 8601 timestamps; null leaves a bound open."
          },
          "time_format": {
            "$ref": "#/components/schemas/ModelNodeMetaTimePickerFormat"
          },
          "time_range": {
            "$ref": "#/components/schemas/ModelNodeMetaTimePickerRange"
          },
          "time_minute_step": {
            "$ref": "#/components/schemas/ModelNodeMetaTimePickerMinuteStep"
          },
          "default_value": {
            "$ref": "#/components/schemas/ModelNodeMetaDefaultValueDateTime"
          },
          "validation": {
            "$ref": "#/components/schemas/ModelNodeMetaValidation"
          }
        },
        "required": [
          "date_format",
          "date_range",
          "time_format",
          "time_range",
          "time_minute_step",
          "validation"
        ],
        "description": "Content and settings of a Date Time question."
      },
      "ModelNodeMetaDefaultValueBoolean": {
        "description": "Value pre-filled for respondents before they answer; null leaves the input empty.",
        "anyOf": [
          {
            "type": "boolean"
          },
          {
            "type": "null"
          }
        ]
      },
      "ModelNodeMetaDefaultValueDate": {
        "description": "Value pre-filled for respondents before they answer; null leaves the input empty.",
        "anyOf": [
          {
            "oneOf": [
              {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "static",
                    "description": "static for a fixed value, relative for the moment the respondent opens the form."
                  },
                  "value": {
                    "description": "The fixed value used when type is static.",
                    "$ref": "#/components/schemas/ModelDate"
                  }
                },
                "required": [
                  "type",
                  "value"
                ]
              },
              {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "relative",
                    "description": "static for a fixed value, relative for the moment the respondent opens the form."
                  }
                },
                "required": [
                  "type"
                ]
              }
            ]
          },
          {
            "type": "null"
          }
        ]
      },
      "ModelNodeMetaDefaultValueDateTime": {
        "description": "Value pre-filled for respondents before they answer; null leaves the input empty.",
        "anyOf": [
          {
            "oneOf": [
              {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "static",
                    "description": "static for a fixed value, relative for the moment the respondent opens the form."
                  },
                  "value": {
                    "description": "The fixed value used when type is static.",
                    "$ref": "#/components/schemas/ModelDate"
                  }
                },
                "required": [
                  "type",
                  "value"
                ]
              },
              {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "relative",
                    "description": "static for a fixed value, relative for the moment the respondent opens the form."
                  }
                },
                "required": [
                  "type"
                ]
              }
            ]
          },
          {
            "type": "null"
          }
        ]
      },
      "ModelNodeMetaDefaultValueMultiSelect": {
        "description": "Value pre-filled for respondents before they answer; null leaves the input empty.",
        "anyOf": [
          {
            "maxItems": 1000,
            "type": "array",
            "items": {
              "type": "string",
              "maxLength": 1000
            }
          },
          {
            "type": "null"
          }
        ]
      },
      "ModelNodeMetaDefaultValueNumber": {
        "description": "Value pre-filled for respondents before they answer; null leaves the input empty.",
        "anyOf": [
          {
            "type": "number"
          },
          {
            "type": "null"
          }
        ]
      },
      "ModelNodeMetaDefaultValueSelect": {
        "description": "Value pre-filled for respondents before they answer; null leaves the input empty.",
        "anyOf": [
          {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 1000
              },
              {
                "maxItems": 1000,
                "type": "array",
                "items": {
                  "type": "string",
                  "maxLength": 1000
                }
              }
            ]
          },
          {
            "type": "null"
          }
        ]
      },
      "ModelNodeMetaDefaultValueSingleSelect": {
        "description": "Value pre-filled for respondents before they answer; null leaves the input empty.",
        "anyOf": [
          {
            "type": "string",
            "maxLength": 1000
          },
          {
            "type": "null"
          }
        ]
      },
      "ModelNodeMetaDefaultValueText": {
        "description": "Value pre-filled for respondents before they answer; null leaves the input empty.",
        "anyOf": [
          {
            "type": "string"
          },
          {
            "type": "null"
          }
        ]
      },
      "ModelNodeMetaDefaultValueTime": {
        "description": "Value pre-filled for respondents before they answer; null leaves the input empty.",
        "anyOf": [
          {
            "oneOf": [
              {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "static",
                    "description": "static for a fixed value, relative for the moment the respondent opens the form."
                  },
                  "value": {
                    "type": "string",
                    "description": "The fixed value used when type is static."
                  }
                },
                "required": [
                  "type",
                  "value"
                ]
              },
              {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "relative",
                    "description": "static for a fixed value, relative for the moment the respondent opens the form."
                  }
                },
                "required": [
                  "type"
                ]
              }
            ]
          },
          {
            "type": "null"
          }
        ]
      },
      "ModelNodeMetaDivider": {
        "type": "object",
        "propertyNames": {
          "type": "string"
        },
        "additionalProperties": {
          "not": {}
        },
        "description": "A Divider block has no settings; the meta must be an empty object."
      },
      "ModelNodeMetaDropdown": {
        "type": "object",
        "properties": {
          "supporting_content_column_count": {
            "description": "Number of supporting content columns under the question: 1 when the question hosts text, images, or dividers, otherwise null.",
            "anyOf": [
              {
                "type": "number",
                "const": 1
              },
              {
                "type": "null"
              }
            ]
          },
          "supporting_content_column_0_alignment": {
            "description": "Vertical alignment of the supporting content column: top, middle, or bottom.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelNodeMetaColumnAlignment"
              },
              {
                "type": "null"
              }
            ]
          },
          "question": {
            "description": "The question text shown to respondents, as inline rich text HTML.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "placeholder": {
            "description": "Placeholder text shown inside the empty input.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "select_options_data": {
            "description": "Selectable options in display order.",
            "maxItems": 1000,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ModelNodeMetaSelectOptionsData"
            }
          },
          "select_options_randomize": {
            "description": "Whether the options are shuffled for each respondent.",
            "type": "boolean"
          },
          "select_options_other_placeholder": {
            "description": "Placeholder of the free-text field shown when the Other option is selected.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "default_value": {
            "$ref": "#/components/schemas/ModelNodeMetaDefaultValueSingleSelect"
          },
          "validation": {
            "$ref": "#/components/schemas/ModelNodeMetaValidation"
          }
        },
        "required": [
          "select_options_data",
          "select_options_randomize",
          "validation"
        ],
        "description": "Content and settings of a Dropdown question."
      },
      "ModelNodeMetaDropdownMultiselect": {
        "type": "object",
        "properties": {
          "supporting_content_column_count": {
            "description": "Number of supporting content columns under the question: 1 when the question hosts text, images, or dividers, otherwise null.",
            "anyOf": [
              {
                "type": "number",
                "const": 1
              },
              {
                "type": "null"
              }
            ]
          },
          "supporting_content_column_0_alignment": {
            "description": "Vertical alignment of the supporting content column: top, middle, or bottom.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelNodeMetaColumnAlignment"
              },
              {
                "type": "null"
              }
            ]
          },
          "question": {
            "description": "The question text shown to respondents, as inline rich text HTML.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "placeholder": {
            "description": "Placeholder text shown inside the empty input.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "select_options_data": {
            "description": "Selectable options in display order.",
            "maxItems": 1000,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ModelNodeMetaSelectOptionsData"
            }
          },
          "select_options_randomize": {
            "description": "Whether the options are shuffled for each respondent.",
            "type": "boolean"
          },
          "select_options_other_placeholder": {
            "description": "Placeholder of the free-text field shown when the Other option is selected.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "default_value": {
            "$ref": "#/components/schemas/ModelNodeMetaDefaultValueMultiSelect"
          },
          "validation": {
            "$ref": "#/components/schemas/ModelNodeMetaValidation"
          }
        },
        "required": [
          "select_options_data",
          "select_options_randomize",
          "validation"
        ],
        "description": "Content and settings of a Multiselect question."
      },
      "ModelNodeMetaFileUpload": {
        "type": "object",
        "properties": {
          "supporting_content_column_count": {
            "description": "Number of supporting content columns under the question: 1 when the question hosts text, images, or dividers, otherwise null.",
            "anyOf": [
              {
                "type": "number",
                "const": 1
              },
              {
                "type": "null"
              }
            ]
          },
          "supporting_content_column_0_alignment": {
            "description": "Vertical alignment of the supporting content column: top, middle, or bottom.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelNodeMetaColumnAlignment"
              },
              {
                "type": "null"
              }
            ]
          },
          "question": {
            "description": "The question text shown to respondents, as inline rich text HTML.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "file_upload_accepted_categories": {
            "$ref": "#/components/schemas/ModelNodeMetaFileUploadAcceptedCategories"
          },
          "file_upload_max_files": {
            "$ref": "#/components/schemas/ModelNodeMetaFileUploadMaxFiles"
          },
          "file_upload_max_file_size_mb": {
            "$ref": "#/components/schemas/ModelNodeMetaFileUploadMaxFileSizeMb"
          },
          "validation": {
            "$ref": "#/components/schemas/ModelNodeMetaValidation"
          }
        },
        "required": [
          "validation"
        ],
        "description": "Content and settings of a File Upload question."
      },
      "ModelNodeMetaFileUploadAcceptedCategories": {
        "description": "Accepted file categories; null accepts every supported category.",
        "anyOf": [
          {
            "maxItems": 5,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ModelSubmissionFileCategory"
            }
          },
          {
            "type": "null"
          }
        ]
      },
      "ModelNodeMetaFileUploadMaxFileSizeMb": {
        "description": "Maximum size per file in megabytes; null uses the default limit.",
        "anyOf": [
          {
            "type": "number"
          },
          {
            "type": "null"
          }
        ]
      },
      "ModelNodeMetaFileUploadMaxFiles": {
        "description": "Maximum number of files per answer; null uses the default limit.",
        "anyOf": [
          {
            "type": "integer",
            "minimum": 1,
            "maximum": 20
          },
          {
            "type": "null"
          }
        ]
      },
      "ModelNodeMetaFormTitle": {
        "type": "object",
        "properties": {
          "use_page_name": {
            "description": "Whether the title shows the page name instead of the custom content.",
            "default": true,
            "type": "boolean"
          },
          "content": {
            "description": "Custom title text shown when use_page_name is false.",
            "anyOf": [
              {
                "type": "string",
                "maxLength": 255
              },
              {
                "type": "null"
              }
            ]
          },
          "level": {
            "description": "Heading level of the title: h1, h2, or h3.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelNodeMetaFormTitleLevel"
              },
              {
                "type": "null"
              }
            ]
          },
          "align": {
            "description": "Horizontal alignment of the title: left, center, or right.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelNodeMetaFormTitleAlign"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "use_page_name"
        ],
        "description": "Settings of the Form Title block."
      },
      "ModelNodeMetaFormTitleAlign": {
        "type": "string",
        "enum": [
          "left",
          "center",
          "right"
        ]
      },
      "ModelNodeMetaFormTitleLevel": {
        "type": "string",
        "enum": [
          "h1",
          "h2",
          "h3"
        ]
      },
      "ModelNodeMetaImage": {
        "type": "object",
        "properties": {
          "image_url": {
            "description": "Public http or https URL of the image.",
            "anyOf": [
              {
                "type": "string",
                "maxLength": 1000,
                "format": "uri"
              },
              {
                "type": "null"
              }
            ]
          },
          "image_caption": {
            "description": "Caption rendered under the image, as inline rich text HTML.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "image_alignment": {
            "description": "Horizontal alignment of the image: left, center, or right.",
            "$ref": "#/components/schemas/ModelNodeMetaImageAlignment"
          },
          "image_width": {
            "description": "Rendered width in pixels; null keeps the natural size.",
            "anyOf": [
              {
                "type": "integer",
                "exclusiveMinimum": 0,
                "maximum": 9007199254740991
              },
              {
                "type": "null"
              }
            ]
          },
          "image_height": {
            "description": "Rendered height in pixels; null keeps the natural size.",
            "anyOf": [
              {
                "type": "integer",
                "exclusiveMinimum": 0,
                "maximum": 9007199254740991
              },
              {
                "type": "null"
              }
            ]
          },
          "image_full_width": {
            "description": "Whether the image stretches to the full form width.",
            "type": "boolean"
          }
        },
        "required": [
          "image_alignment",
          "image_full_width"
        ],
        "description": "Content and settings of an Image block."
      },
      "ModelNodeMetaImageAlignment": {
        "type": "string",
        "enum": [
          "left",
          "center",
          "right"
        ]
      },
      "ModelNodeMetaLayoutColumnCount": {
        "description": "Number of columns in the layout row, from 1 to 3.",
        "type": "integer",
        "minimum": 1,
        "maximum": 3
      },
      "ModelNodeMetaLayoutRow": {
        "type": "object",
        "properties": {
          "column_count": {
            "$ref": "#/components/schemas/ModelNodeMetaLayoutColumnCount"
          },
          "column_0_alignment": {
            "description": "Vertical alignment of the first column: top, middle, or bottom.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelNodeMetaColumnAlignment"
              },
              {
                "type": "null"
              }
            ]
          },
          "column_1_alignment": {
            "description": "Vertical alignment of the second column: top, middle, or bottom.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelNodeMetaColumnAlignment"
              },
              {
                "type": "null"
              }
            ]
          },
          "column_2_alignment": {
            "description": "Vertical alignment of the third column: top, middle, or bottom.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelNodeMetaColumnAlignment"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "column_count"
        ],
        "description": "Settings of a Layout Row that places blocks side by side."
      },
      "ModelNodeMetaMatrix": {
        "type": "object",
        "properties": {
          "supporting_content_column_count": {
            "description": "Number of supporting content columns under the question: 1 when the question hosts text, images, or dividers, otherwise null.",
            "anyOf": [
              {
                "type": "number",
                "const": 1
              },
              {
                "type": "null"
              }
            ]
          },
          "supporting_content_column_0_alignment": {
            "description": "Vertical alignment of the supporting content column: top, middle, or bottom.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelNodeMetaColumnAlignment"
              },
              {
                "type": "null"
              }
            ]
          },
          "question": {
            "description": "The question text shown to respondents, as inline rich text HTML.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "select_options_data": {
            "maxItems": 30,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ModelNodeMetaSelectOptionsData"
            },
            "description": "Selectable options in display order."
          },
          "select_options_matrix_rows": {
            "maxItems": 50,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ModelNodeMetaSelectOptionsMatrixRow"
            },
            "description": "Matrix rows in display order; the columns come from select_options_data."
          },
          "validation": {
            "$ref": "#/components/schemas/ModelNodeMetaValidation"
          }
        },
        "required": [
          "select_options_data",
          "select_options_matrix_rows",
          "validation"
        ],
        "description": "Content and settings of a Matrix question."
      },
      "ModelNodeMetaMultipleChoice": {
        "type": "object",
        "properties": {
          "supporting_content_column_count": {
            "description": "Number of supporting content columns under the question: 1 when the question hosts text, images, or dividers, otherwise null.",
            "anyOf": [
              {
                "type": "number",
                "const": 1
              },
              {
                "type": "null"
              }
            ]
          },
          "supporting_content_column_0_alignment": {
            "description": "Vertical alignment of the supporting content column: top, middle, or bottom.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelNodeMetaColumnAlignment"
              },
              {
                "type": "null"
              }
            ]
          },
          "question": {
            "description": "The question text shown to respondents, as inline rich text HTML.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "select_options_data": {
            "description": "Selectable options in display order.",
            "maxItems": 1000,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ModelNodeMetaSelectOptionsData"
            }
          },
          "select_options_randomize": {
            "description": "Whether the options are shuffled for each respondent.",
            "type": "boolean"
          },
          "select_options_selection": {
            "$ref": "#/components/schemas/ModelNodeMetaSelectOptionsSelection"
          },
          "select_options_layout": {
            "$ref": "#/components/schemas/ModelNodeMetaSelectOptionsLayout"
          },
          "is_select_options_layout_override": {
            "description": "Whether this question overrides the theme's option layout.",
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ]
          },
          "select_options_colored": {
            "description": "Whether the options are painted with the theme's option colors; null follows the theme.",
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ]
          },
          "select_options_other_placeholder": {
            "description": "Placeholder of the free-text field shown when the Other option is selected.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "multiple_choice_variant": {
            "$ref": "#/components/schemas/ModelNodeMetaMultipleChoiceVariant"
          },
          "default_value": {
            "$ref": "#/components/schemas/ModelNodeMetaDefaultValueSelect"
          },
          "validation": {
            "$ref": "#/components/schemas/ModelNodeMetaValidation"
          }
        },
        "required": [
          "select_options_data",
          "select_options_randomize",
          "multiple_choice_variant",
          "validation"
        ],
        "description": "Content and settings of a Multiple Choice question."
      },
      "ModelNodeMetaMultipleChoiceVariant": {
        "description": "Key shown before each option: number or alphabet.",
        "type": "string",
        "enum": [
          "number",
          "alphabet"
        ]
      },
      "ModelNodeMetaNps": {
        "type": "object",
        "properties": {
          "supporting_content_column_count": {
            "description": "Number of supporting content columns under the question: 1 when the question hosts text, images, or dividers, otherwise null.",
            "anyOf": [
              {
                "type": "number",
                "const": 1
              },
              {
                "type": "null"
              }
            ]
          },
          "supporting_content_column_0_alignment": {
            "description": "Vertical alignment of the supporting content column: top, middle, or bottom.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelNodeMetaColumnAlignment"
              },
              {
                "type": "null"
              }
            ]
          },
          "question": {
            "description": "The question text shown to respondents, as inline rich text HTML.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "rating_reverse": {
            "$ref": "#/components/schemas/ModelNodeMetaScaleReverse"
          },
          "nps_display": {
            "$ref": "#/components/schemas/ModelNodeMetaNpsDisplay"
          },
          "nps_colors": {
            "$ref": "#/components/schemas/ModelNodeMetaNpsColors"
          },
          "nps_legend": {
            "$ref": "#/components/schemas/ModelNodeMetaNpsLegend"
          },
          "nps_legend_detractors": {
            "description": "Label for scores from 0 to 6.",
            "$ref": "#/components/schemas/ModelNodeMetaNpsLegendName"
          },
          "nps_legend_passives": {
            "description": "Label for scores from 7 to 8.",
            "$ref": "#/components/schemas/ModelNodeMetaNpsLegendName"
          },
          "nps_legend_promoters": {
            "description": "Label for scores from 9 to 10.",
            "$ref": "#/components/schemas/ModelNodeMetaNpsLegendName"
          },
          "default_value": {
            "$ref": "#/components/schemas/ModelNodeMetaDefaultValueNumber"
          },
          "validation": {
            "$ref": "#/components/schemas/ModelNodeMetaValidation"
          }
        },
        "required": [
          "validation"
        ],
        "description": "Content and settings of a Net Promoter Score question."
      },
      "ModelNodeMetaNpsColors": {
        "description": "Whether NPS score groups use distinct colors.",
        "anyOf": [
          {
            "type": "boolean"
          },
          {
            "type": "null"
          }
        ]
      },
      "ModelNodeMetaNpsDisplay": {
        "description": "Display mode of the fixed 0 to 10 NPS scale: numbers or smileys.",
        "anyOf": [
          {
            "type": "string",
            "enum": [
              "numbers",
              "smileys"
            ]
          },
          {
            "type": "null"
          }
        ]
      },
      "ModelNodeMetaNpsLegend": {
        "description": "Whether the detractor, passive, and promoter legend is shown.",
        "anyOf": [
          {
            "type": "boolean"
          },
          {
            "type": "null"
          }
        ]
      },
      "ModelNodeMetaNpsLegendName": {
        "anyOf": [
          {
            "type": "string"
          },
          {
            "type": "null"
          }
        ]
      },
      "ModelNodeMetaNumberButtonIcon": {
        "anyOf": [
          {
            "type": "string",
            "enum": [
              "chevrons",
              "plus_minus"
            ]
          },
          {
            "type": "null"
          }
        ]
      },
      "ModelNodeMetaNumberInput": {
        "type": "object",
        "properties": {
          "supporting_content_column_count": {
            "description": "Number of supporting content columns under the question: 1 when the question hosts text, images, or dividers, otherwise null.",
            "anyOf": [
              {
                "type": "number",
                "const": 1
              },
              {
                "type": "null"
              }
            ]
          },
          "supporting_content_column_0_alignment": {
            "description": "Vertical alignment of the supporting content column: top, middle, or bottom.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelNodeMetaColumnAlignment"
              },
              {
                "type": "null"
              }
            ]
          },
          "question": {
            "description": "The question text shown to respondents, as inline rich text HTML.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "placeholder": {
            "description": "Placeholder text shown inside the empty input.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "number_style": {
            "description": "How the number is entered: a plain field or a stepper with buttons.",
            "$ref": "#/components/schemas/ModelNodeMetaNumberStyle"
          },
          "number_button_icon": {
            "description": "Icons on the stepper buttons.",
            "$ref": "#/components/schemas/ModelNodeMetaNumberButtonIcon"
          },
          "number_minmax": {
            "description": "Accepted range, or null for any number.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelNodeMetaNumberMinMax"
              },
              {
                "type": "null"
              }
            ]
          },
          "number_step": {
            "description": "Increment of the stepper buttons, or null for 1.",
            "$ref": "#/components/schemas/ModelNodeMetaNumberStep"
          },
          "number_whole_only": {
            "description": "Whether only whole numbers are accepted.",
            "$ref": "#/components/schemas/ModelNodeMetaNumberWholeOnly"
          },
          "default_value": {
            "$ref": "#/components/schemas/ModelNodeMetaDefaultValueNumber"
          },
          "validation": {
            "$ref": "#/components/schemas/ModelNodeMetaValidation"
          }
        },
        "required": [
          "validation"
        ],
        "description": "Content and settings of a Number question."
      },
      "ModelNodeMetaNumberMinMax": {
        "type": "object",
        "properties": {
          "min": {
            "description": "Smallest accepted number, or null for no minimum.",
            "anyOf": [
              {
                "type": "number",
                "minimum": -1000000000000,
                "maximum": 1000000000000
              },
              {
                "type": "null"
              }
            ]
          },
          "max": {
            "description": "Largest accepted number, or null for no maximum.",
            "anyOf": [
              {
                "type": "number",
                "minimum": -1000000000000,
                "maximum": 1000000000000
              },
              {
                "type": "null"
              }
            ]
          }
        }
      },
      "ModelNodeMetaNumberStep": {
        "anyOf": [
          {
            "type": "number",
            "minimum": 0.0001,
            "maximum": 1000000000000
          },
          {
            "type": "null"
          }
        ]
      },
      "ModelNodeMetaNumberStyle": {
        "anyOf": [
          {
            "type": "string",
            "enum": [
              "classic",
              "stepper"
            ]
          },
          {
            "type": "null"
          }
        ]
      },
      "ModelNodeMetaNumberWholeOnly": {
        "anyOf": [
          {
            "type": "boolean"
          },
          {
            "type": "null"
          }
        ]
      },
      "ModelNodeMetaPhoneNumberInput": {
        "type": "object",
        "properties": {
          "supporting_content_column_count": {
            "description": "Number of supporting content columns under the question: 1 when the question hosts text, images, or dividers, otherwise null.",
            "anyOf": [
              {
                "type": "number",
                "const": 1
              },
              {
                "type": "null"
              }
            ]
          },
          "supporting_content_column_0_alignment": {
            "description": "Vertical alignment of the supporting content column: top, middle, or bottom.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelNodeMetaColumnAlignment"
              },
              {
                "type": "null"
              }
            ]
          },
          "question": {
            "description": "The question text shown to respondents, as inline rich text HTML.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "placeholder": {
            "description": "Placeholder text shown inside the empty input.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "default_value": {
            "$ref": "#/components/schemas/ModelNodeMetaDefaultValueText"
          },
          "validation": {
            "$ref": "#/components/schemas/ModelNodeMetaValidation"
          }
        },
        "required": [
          "validation"
        ],
        "description": "Content and settings of a Phone question."
      },
      "ModelNodeMetaProgressBar": {
        "type": "object",
        "properties": {
          "progress_bar_style": {
            "description": "How progress is drawn.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelNodeMetaProgressBarStyle"
              },
              {
                "type": "null"
              }
            ]
          },
          "progress_bar_position": {
            "description": "Where the bar sits on the page.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelNodeMetaProgressBarPosition"
              },
              {
                "type": "null"
              }
            ]
          },
          "progress_bar_animated": {
            "description": "Whether the bar animates between pages.",
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "description": "Content and settings of a Progress Bar block."
      },
      "ModelNodeMetaProgressBarPosition": {
        "type": "string",
        "enum": [
          "top",
          "bottom"
        ]
      },
      "ModelNodeMetaProgressBarStyle": {
        "type": "string",
        "enum": [
          "bar",
          "segments",
          "bullets"
        ]
      },
      "ModelNodeMetaRanking": {
        "type": "object",
        "properties": {
          "supporting_content_column_count": {
            "description": "Number of supporting content columns under the question: 1 when the question hosts text, images, or dividers, otherwise null.",
            "anyOf": [
              {
                "type": "number",
                "const": 1
              },
              {
                "type": "null"
              }
            ]
          },
          "supporting_content_column_0_alignment": {
            "description": "Vertical alignment of the supporting content column: top, middle, or bottom.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelNodeMetaColumnAlignment"
              },
              {
                "type": "null"
              }
            ]
          },
          "question": {
            "description": "The question text shown to respondents, as inline rich text HTML.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "select_options_data": {
            "maxItems": 1000,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ModelNodeMetaSelectOptionsData"
            },
            "description": "Selectable options in display order."
          },
          "select_options_randomize": {
            "description": "Whether the options are shuffled for each respondent.",
            "type": "boolean"
          },
          "select_options_layout": {
            "$ref": "#/components/schemas/ModelNodeMetaSelectOptionsLayout"
          },
          "is_select_options_layout_override": {
            "description": "Whether this question overrides the theme's option layout.",
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ]
          },
          "select_options_colored": {
            "description": "Whether the options are painted with the theme's option colors; null follows the theme.",
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ]
          },
          "validation": {
            "$ref": "#/components/schemas/ModelNodeMetaValidation"
          }
        },
        "required": [
          "select_options_data",
          "select_options_randomize",
          "validation"
        ],
        "description": "Content and settings of a Ranking question."
      },
      "ModelNodeMetaRating": {
        "type": "object",
        "properties": {
          "supporting_content_column_count": {
            "description": "Number of supporting content columns under the question: 1 when the question hosts text, images, or dividers, otherwise null.",
            "anyOf": [
              {
                "type": "number",
                "const": 1
              },
              {
                "type": "null"
              }
            ]
          },
          "supporting_content_column_0_alignment": {
            "description": "Vertical alignment of the supporting content column: top, middle, or bottom.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelNodeMetaColumnAlignment"
              },
              {
                "type": "null"
              }
            ]
          },
          "question": {
            "description": "The question text shown to respondents, as inline rich text HTML.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "rating_allow_half": {
            "$ref": "#/components/schemas/ModelNodeMetaRatingAllowHalf"
          },
          "rating_max": {
            "$ref": "#/components/schemas/ModelNodeMetaRatingMax"
          },
          "default_value": {
            "$ref": "#/components/schemas/ModelNodeMetaDefaultValueNumber"
          },
          "validation": {
            "$ref": "#/components/schemas/ModelNodeMetaValidation"
          }
        },
        "required": [
          "rating_allow_half",
          "rating_max",
          "validation"
        ],
        "description": "Content and settings of a Rating question."
      },
      "ModelNodeMetaRatingAllowHalf": {
        "description": "Whether half steps can be selected.",
        "default": false,
        "type": "boolean"
      },
      "ModelNodeMetaRatingMax": {
        "description": "Number of stars on the Rating question.",
        "type": "number",
        "minimum": 1,
        "maximum": 10
      },
      "ModelNodeMetaRatingNumber": {
        "type": "object",
        "properties": {
          "supporting_content_column_count": {
            "description": "Number of supporting content columns under the question: 1 when the question hosts text, images, or dividers, otherwise null.",
            "anyOf": [
              {
                "type": "number",
                "const": 1
              },
              {
                "type": "null"
              }
            ]
          },
          "supporting_content_column_0_alignment": {
            "description": "Vertical alignment of the supporting content column: top, middle, or bottom.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelNodeMetaColumnAlignment"
              },
              {
                "type": "null"
              }
            ]
          },
          "question": {
            "description": "The question text shown to respondents, as inline rich text HTML.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "rating_start": {
            "$ref": "#/components/schemas/ModelNodeMetaScaleStart"
          },
          "rating_max": {
            "$ref": "#/components/schemas/ModelNodeMetaScaleEnd"
          },
          "rating_reverse": {
            "$ref": "#/components/schemas/ModelNodeMetaScaleReverse"
          },
          "rating_labels": {
            "$ref": "#/components/schemas/ModelNodeMetaScaleLabels"
          },
          "rating_label_low": {
            "description": "Label for the lowest scale value.",
            "$ref": "#/components/schemas/ModelNodeMetaScaleLabel"
          },
          "rating_label_high": {
            "description": "Label for the highest scale value.",
            "$ref": "#/components/schemas/ModelNodeMetaScaleLabel"
          },
          "default_value": {
            "$ref": "#/components/schemas/ModelNodeMetaDefaultValueNumber"
          },
          "validation": {
            "$ref": "#/components/schemas/ModelNodeMetaValidation"
          }
        },
        "required": [
          "rating_max",
          "validation"
        ],
        "description": "Content and settings of a Linear Scale question."
      },
      "ModelNodeMetaScaleEnd": {
        "description": "Highest selectable Linear Scale value.",
        "type": "number",
        "minimum": -10,
        "maximum": 10
      },
      "ModelNodeMetaScaleLabel": {
        "anyOf": [
          {
            "type": "string"
          },
          {
            "type": "null"
          }
        ]
      },
      "ModelNodeMetaScaleLabels": {
        "description": "Whether the endpoint labels are shown.",
        "anyOf": [
          {
            "type": "boolean"
          },
          {
            "type": "null"
          }
        ]
      },
      "ModelNodeMetaScaleReverse": {
        "description": "Whether the scale is displayed in descending order.",
        "anyOf": [
          {
            "type": "boolean"
          },
          {
            "type": "null"
          }
        ]
      },
      "ModelNodeMetaScaleStart": {
        "description": "Lowest selectable Linear Scale value.",
        "anyOf": [
          {
            "type": "number",
            "minimum": -10,
            "maximum": 10
          },
          {
            "type": "null"
          }
        ]
      },
      "ModelNodeMetaSelectOption": {
        "type": "object",
        "properties": {
          "value": {
            "description": "Stable option value stored in answers.",
            "type": "string"
          },
          "label": {
            "description": "Option label shown to respondents.",
            "type": "string"
          },
          "label_formatted": {
            "description": "Option label as inline rich text HTML; derived from label when omitted.",
            "type": "string"
          }
        },
        "required": [
          "value",
          "label"
        ]
      },
      "ModelNodeMetaSelectOptionsData": {
        "$ref": "#/components/schemas/ModelNodeMetaSelectOption"
      },
      "ModelNodeMetaSelectOptionsLayout": {
        "description": "Option layout: list, bordered, or inline; applies only when is_select_options_layout_override is true.",
        "type": "string",
        "enum": [
          "list",
          "bordered",
          "inline"
        ]
      },
      "ModelNodeMetaSelectOptionsMatrixRow": {
        "$ref": "#/components/schemas/ModelNodeMetaSelectOption"
      },
      "ModelNodeMetaSelectOptionsSelection": {
        "description": "Whether respondents pick one option (single) or several (multiple).",
        "type": "string",
        "enum": [
          "single",
          "multiple"
        ]
      },
      "ModelNodeMetaSelectOptionsStyle": {
        "description": "Control style of the options: checkbox or radio.",
        "type": "string",
        "enum": [
          "checkbox",
          "radio"
        ]
      },
      "ModelNodeMetaSlider": {
        "type": "object",
        "properties": {
          "supporting_content_column_count": {
            "description": "Number of supporting content columns under the question: 1 when the question hosts text, images, or dividers, otherwise null.",
            "anyOf": [
              {
                "type": "number",
                "const": 1
              },
              {
                "type": "null"
              }
            ]
          },
          "supporting_content_column_0_alignment": {
            "description": "Vertical alignment of the supporting content column: top, middle, or bottom.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelNodeMetaColumnAlignment"
              },
              {
                "type": "null"
              }
            ]
          },
          "question": {
            "description": "The question text shown to respondents, as inline rich text HTML.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "slider_step": {
            "$ref": "#/components/schemas/ModelNodeMetaSliderStep"
          },
          "slider_minmax": {
            "$ref": "#/components/schemas/ModelNodeMetaSliderMinMax"
          },
          "slider_show_value": {
            "$ref": "#/components/schemas/ModelNodeMetaSliderShowValueType"
          },
          "default_value": {
            "$ref": "#/components/schemas/ModelNodeMetaDefaultValueNumber"
          },
          "validation": {
            "$ref": "#/components/schemas/ModelNodeMetaValidation"
          }
        },
        "required": [
          "slider_step",
          "slider_minmax",
          "slider_show_value",
          "validation"
        ],
        "description": "Content and settings of a Slider question."
      },
      "ModelNodeMetaSliderMinMax": {
        "type": "object",
        "properties": {
          "min": {
            "description": "Lowest selectable value.",
            "type": "number",
            "minimum": -1000,
            "maximum": 1000
          },
          "max": {
            "description": "Highest selectable value.",
            "type": "number",
            "minimum": -1000,
            "maximum": 1000
          }
        },
        "required": [
          "min",
          "max"
        ],
        "description": "Lowest and highest selectable values."
      },
      "ModelNodeMetaSliderShowValueType": {
        "description": "When the current value is displayed: none, hover, or always.",
        "type": "string",
        "enum": [
          "none",
          "hover",
          "always"
        ]
      },
      "ModelNodeMetaSliderStep": {
        "description": "Increment between selectable values.",
        "type": "number",
        "minimum": 0.0001,
        "maximum": 100
      },
      "ModelNodeMetaSwitch": {
        "type": "object",
        "properties": {
          "supporting_content_column_count": {
            "description": "Number of supporting content columns under the question: 1 when the question hosts text, images, or dividers, otherwise null.",
            "anyOf": [
              {
                "type": "number",
                "const": 1
              },
              {
                "type": "null"
              }
            ]
          },
          "supporting_content_column_0_alignment": {
            "description": "Vertical alignment of the supporting content column: top, middle, or bottom.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelNodeMetaColumnAlignment"
              },
              {
                "type": "null"
              }
            ]
          },
          "question": {
            "description": "The question text shown to respondents, as inline rich text HTML.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "placeholder": {
            "description": "Placeholder text shown inside the empty input.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "default_value": {
            "$ref": "#/components/schemas/ModelNodeMetaDefaultValueBoolean"
          },
          "validation": {
            "$ref": "#/components/schemas/ModelNodeMetaValidation"
          }
        },
        "required": [
          "validation"
        ],
        "description": "Content and settings of a Switch question."
      },
      "ModelNodeMetaText": {
        "type": "object",
        "properties": {
          "content": {
            "description": "Block rich text HTML rendered as the text block.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "description": "Content of a Text block."
      },
      "ModelNodeMetaTextInputEmail": {
        "type": "object",
        "properties": {
          "supporting_content_column_count": {
            "description": "Number of supporting content columns under the question: 1 when the question hosts text, images, or dividers, otherwise null.",
            "anyOf": [
              {
                "type": "number",
                "const": 1
              },
              {
                "type": "null"
              }
            ]
          },
          "supporting_content_column_0_alignment": {
            "description": "Vertical alignment of the supporting content column: top, middle, or bottom.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelNodeMetaColumnAlignment"
              },
              {
                "type": "null"
              }
            ]
          },
          "question": {
            "description": "The question text shown to respondents, as inline rich text HTML.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "placeholder": {
            "description": "Placeholder text shown inside the empty input.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "default_value": {
            "$ref": "#/components/schemas/ModelNodeMetaDefaultValueText"
          },
          "validation": {
            "$ref": "#/components/schemas/ModelNodeMetaValidation"
          }
        },
        "required": [
          "validation"
        ],
        "description": "Content and settings of an Email question."
      },
      "ModelNodeMetaTextInputLink": {
        "type": "object",
        "properties": {
          "supporting_content_column_count": {
            "description": "Number of supporting content columns under the question: 1 when the question hosts text, images, or dividers, otherwise null.",
            "anyOf": [
              {
                "type": "number",
                "const": 1
              },
              {
                "type": "null"
              }
            ]
          },
          "supporting_content_column_0_alignment": {
            "description": "Vertical alignment of the supporting content column: top, middle, or bottom.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelNodeMetaColumnAlignment"
              },
              {
                "type": "null"
              }
            ]
          },
          "question": {
            "description": "The question text shown to respondents, as inline rich text HTML.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "placeholder": {
            "description": "Placeholder text shown inside the empty input.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "default_value": {
            "$ref": "#/components/schemas/ModelNodeMetaDefaultValueText"
          },
          "validation": {
            "$ref": "#/components/schemas/ModelNodeMetaValidation"
          }
        },
        "required": [
          "validation"
        ],
        "description": "Content and settings of a Link question."
      },
      "ModelNodeMetaTextInputLong": {
        "type": "object",
        "properties": {
          "supporting_content_column_count": {
            "description": "Number of supporting content columns under the question: 1 when the question hosts text, images, or dividers, otherwise null.",
            "anyOf": [
              {
                "type": "number",
                "const": 1
              },
              {
                "type": "null"
              }
            ]
          },
          "supporting_content_column_0_alignment": {
            "description": "Vertical alignment of the supporting content column: top, middle, or bottom.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelNodeMetaColumnAlignment"
              },
              {
                "type": "null"
              }
            ]
          },
          "question": {
            "description": "The question text shown to respondents, as inline rich text HTML.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "placeholder": {
            "description": "Placeholder text shown inside the empty input.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "default_value": {
            "$ref": "#/components/schemas/ModelNodeMetaDefaultValueText"
          },
          "validation": {
            "$ref": "#/components/schemas/ModelNodeMetaValidation"
          }
        },
        "required": [
          "validation"
        ],
        "description": "Content and settings of a Long Answer question."
      },
      "ModelNodeMetaTextInputShort": {
        "type": "object",
        "properties": {
          "supporting_content_column_count": {
            "description": "Number of supporting content columns under the question: 1 when the question hosts text, images, or dividers, otherwise null.",
            "anyOf": [
              {
                "type": "number",
                "const": 1
              },
              {
                "type": "null"
              }
            ]
          },
          "supporting_content_column_0_alignment": {
            "description": "Vertical alignment of the supporting content column: top, middle, or bottom.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelNodeMetaColumnAlignment"
              },
              {
                "type": "null"
              }
            ]
          },
          "question": {
            "description": "The question text shown to respondents, as inline rich text HTML.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "placeholder": {
            "description": "Placeholder text shown inside the empty input.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "default_value": {
            "$ref": "#/components/schemas/ModelNodeMetaDefaultValueText"
          },
          "validation": {
            "$ref": "#/components/schemas/ModelNodeMetaValidation"
          }
        },
        "required": [
          "validation"
        ],
        "description": "Content and settings of a Short Answer question."
      },
      "ModelNodeMetaThankYou": {
        "type": "object",
        "properties": {
          "thank_you_title": {
            "description": "Title shown on the thank-you page, as block rich text HTML.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "thank_you_description": {
            "description": "Description shown under the title, as block rich text HTML.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "thank_you_icon": {
            "description": "Icon shown above the title: none, check, or check_animated.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelNodeMetaThankYouIcon"
              },
              {
                "type": "null"
              }
            ]
          },
          "thank_you_confetti": {
            "description": "Whether confetti plays when the thank-you page appears.",
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "description": "Content and settings of the Thank You block on an ending."
      },
      "ModelNodeMetaThankYouIcon": {
        "type": "string",
        "enum": [
          "none",
          "check",
          "check_animated",
          "mascot"
        ]
      },
      "ModelNodeMetaTimePicker": {
        "type": "object",
        "properties": {
          "supporting_content_column_count": {
            "description": "Number of supporting content columns under the question: 1 when the question hosts text, images, or dividers, otherwise null.",
            "anyOf": [
              {
                "type": "number",
                "const": 1
              },
              {
                "type": "null"
              }
            ]
          },
          "supporting_content_column_0_alignment": {
            "description": "Vertical alignment of the supporting content column: top, middle, or bottom.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelNodeMetaColumnAlignment"
              },
              {
                "type": "null"
              }
            ]
          },
          "question": {
            "description": "The question text shown to respondents, as inline rich text HTML.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "placeholder": {
            "description": "Placeholder text shown inside the empty input.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "time_format": {
            "$ref": "#/components/schemas/ModelNodeMetaTimePickerFormat"
          },
          "time_range": {
            "$ref": "#/components/schemas/ModelNodeMetaTimePickerRange"
          },
          "time_minute_step": {
            "$ref": "#/components/schemas/ModelNodeMetaTimePickerMinuteStep"
          },
          "default_value": {
            "$ref": "#/components/schemas/ModelNodeMetaDefaultValueTime"
          },
          "validation": {
            "$ref": "#/components/schemas/ModelNodeMetaValidation"
          }
        },
        "required": [
          "time_format",
          "time_range",
          "time_minute_step",
          "validation"
        ],
        "description": "Content and settings of a Time question."
      },
      "ModelNodeMetaTimePickerFormat": {
        "description": "Display format of times: HH:mm or hh:mm A.",
        "type": "string",
        "enum": [
          "HH:mm",
          "hh:mm A"
        ]
      },
      "ModelNodeMetaTimePickerMinuteStep": {
        "description": "Minute increment offered by the time picker: 1, 5, 10, 15, 30, or 60.",
        "type": "string",
        "enum": [
          "1",
          "5",
          "10",
          "15",
          "30",
          "60"
        ]
      },
      "ModelNodeMetaTimePickerRange": {
        "type": "object",
        "properties": {
          "min": {
            "description": "Earliest selectable time, or null.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "max": {
            "description": "Latest selectable time, or null.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "description": "Earliest and latest selectable times in HH:mm; null leaves a bound open."
      },
      "ModelNodeMetaValidation": {
        "type": "object",
        "properties": {
          "required": {
            "description": "Whether respondents must answer before continuing.",
            "type": "boolean"
          }
        },
        "required": [
          "required"
        ],
        "description": "Answer validation rules. Omitting it on write makes the question required."
      },
      "ModelNodeMetaYesNo": {
        "type": "object",
        "properties": {
          "supporting_content_column_count": {
            "description": "Number of supporting content columns under the question: 1 when the question hosts text, images, or dividers, otherwise null.",
            "anyOf": [
              {
                "type": "number",
                "const": 1
              },
              {
                "type": "null"
              }
            ]
          },
          "supporting_content_column_0_alignment": {
            "description": "Vertical alignment of the supporting content column: top, middle, or bottom.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelNodeMetaColumnAlignment"
              },
              {
                "type": "null"
              }
            ]
          },
          "question": {
            "description": "The question text shown to respondents, as inline rich text HTML.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "select_options_data": {
            "description": "Selectable options in display order.",
            "minItems": 2,
            "maxItems": 2,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ModelNodeMetaSelectOptionsData"
            }
          },
          "select_options_style": {
            "$ref": "#/components/schemas/ModelNodeMetaSelectOptionsStyle"
          },
          "select_options_layout": {
            "$ref": "#/components/schemas/ModelNodeMetaSelectOptionsLayout"
          },
          "is_select_options_layout_override": {
            "description": "Whether this question overrides the theme's option layout.",
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ]
          },
          "select_options_colored": {
            "description": "Whether the options are painted with the theme's option colors; null follows the theme.",
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ]
          },
          "default_value": {
            "$ref": "#/components/schemas/ModelNodeMetaDefaultValueSingleSelect"
          },
          "validation": {
            "$ref": "#/components/schemas/ModelNodeMetaValidation"
          }
        },
        "required": [
          "select_options_data",
          "validation"
        ],
        "description": "Content and settings of a Yes/No question."
      },
      "ModelNullableBooleanAsInt": {
        "description": "Nullable integer boolean: 1, 0, or null on read; true or false (or 1 or 0) accepted on write.",
        "anyOf": [
          {
            "type": "number",
            "enum": [
              0,
              1
            ]
          },
          {
            "type": "null"
          }
        ]
      },
      "ModelNullableBooleanAsIntInput": {
        "description": "Nullable integer boolean: 1, 0, or null on read; true or false (or 1 or 0) accepted on write.",
        "anyOf": [
          {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "number",
                "enum": [
                  0,
                  1
                ]
              }
            ]
          },
          {
            "type": "null"
          }
        ]
      },
      "ModelOrganizationPermissionAccessValue": {
        "type": "string",
        "enum": [
          "none",
          "read",
          "write"
        ]
      },
      "ModelOrganizationResolvedPermissions": {
        "type": "object",
        "properties": {
          "forms": {
            "default": "none",
            "description": "Access to forms.",
            "$ref": "#/components/schemas/ModelOrganizationPermissionAccessValue"
          },
          "templates": {
            "default": "none",
            "description": "Access to Private Templates.",
            "$ref": "#/components/schemas/ModelOrganizationPermissionAccessValue"
          },
          "assets": {
            "default": "none",
            "description": "Access to uploaded images and files.",
            "$ref": "#/components/schemas/ModelOrganizationPermissionAccessValue"
          },
          "workflows": {
            "default": "none",
            "description": "Access to workflows.",
            "$ref": "#/components/schemas/ModelOrganizationPermissionAccessValue"
          },
          "form_publish": {
            "default": false,
            "description": "Whether the member can publish and unpublish forms.",
            "type": "boolean"
          },
          "integration_management": {
            "default": false,
            "description": "Whether the member can connect and disconnect integrations.",
            "type": "boolean"
          },
          "team_members": {
            "default": "none",
            "description": "Access to the organization members list.",
            "$ref": "#/components/schemas/ModelOrganizationPermissionAccessValue"
          },
          "domains": {
            "default": "none",
            "description": "Access to custom domains.",
            "$ref": "#/components/schemas/ModelOrganizationPermissionAccessValue"
          },
          "billing": {
            "default": false,
            "description": "Whether the member can manage the subscription.",
            "type": "boolean"
          },
          "organization_settings": {
            "default": false,
            "description": "Whether the member can change organization settings.",
            "type": "boolean"
          },
          "workspace_management": {
            "default": false,
            "description": "Whether the member can create, rename, and delete workspaces.",
            "type": "boolean"
          },
          "personal_access_tokens": {
            "default": false,
            "description": "Whether the member can create and use Personal Access Tokens.",
            "type": "boolean"
          }
        },
        "required": [
          "forms",
          "templates",
          "assets",
          "workflows",
          "form_publish",
          "integration_management",
          "team_members",
          "domains",
          "billing",
          "organization_settings",
          "workspace_management",
          "personal_access_tokens"
        ]
      },
      "ModelPageType": {
        "type": "string",
        "enum": [
          "intro",
          "normal",
          "final"
        ]
      },
      "ModelPageTypeInput": {
        "type": "string",
        "enum": [
          "intro",
          "normal",
          "final"
        ]
      },
      "ModelPersonalAccessTokenPublicId": {
        "type": "string",
        "minLength": 10,
        "maxLength": 10,
        "pattern": "^[A-Za-z0-9_-]+$"
      },
      "ModelPlatformAiServiceUnavailableError": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string",
            "const": "AI_SERVICE_UNAVAILABLE",
            "description": "The AI provider could not complete the generation. Retry later."
          },
          "message": {
            "type": "string",
            "description": "A human-readable explanation. Not part of the contract; never branch on it."
          },
          "request_id": {
            "type": "string",
            "description": "The ID of the failed request, also sent as the X-Request-Id response header."
          },
          "retry_after_seconds": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991,
            "description": "Seconds to wait before retrying. Also sent as the Retry-After response header."
          }
        },
        "required": [
          "code",
          "message",
          "request_id",
          "retry_after_seconds"
        ]
      },
      "ModelPlatformApiBudgetPolicy": {
        "type": "string",
        "enum": [
          "minute",
          "burst"
        ],
        "description": "Which of the two budget policies a figure belongs to: the API Burst or the API Minute Cap."
      },
      "ModelPlatformApiBurstUsage": {
        "type": "object",
        "properties": {
          "limit": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991,
            "description": "Credits the organization may spend before the API Cooldown starts."
          },
          "used": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991,
            "description": "Credits spent in the window that is currently open."
          },
          "remaining": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991,
            "description": "Credits left before the API Cooldown starts."
          },
          "window_seconds": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991,
            "description": "How long the window lasts. The API Cooldown is the same length."
          },
          "resets_at": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelDate"
              },
              {
                "type": "null"
              }
            ],
            "description": "When the window ends, or null when no window is open because nothing has been spent."
          },
          "cooldown_until": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelDate"
              },
              {
                "type": "null"
              }
            ],
            "description": "When the API Cooldown ends, or null when the organization is not in cooldown."
          }
        },
        "required": [
          "limit",
          "used",
          "remaining",
          "window_seconds",
          "resets_at",
          "cooldown_until"
        ]
      },
      "ModelPlatformApiMinuteUsage": {
        "type": "object",
        "properties": {
          "limit": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991,
            "description": "Credits the organization may spend in one sixty-second window."
          },
          "used": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991,
            "description": "Credits spent in the window that is currently open."
          },
          "remaining": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991,
            "description": "Credits left in the current window."
          },
          "window_seconds": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991,
            "description": "How long the window lasts. Always sixty seconds."
          },
          "resets_at": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelDate"
              },
              {
                "type": "null"
              }
            ],
            "description": "When the window ends, or null when no window is open because nothing has been spent."
          }
        },
        "required": [
          "limit",
          "used",
          "remaining",
          "window_seconds",
          "resets_at"
        ]
      },
      "ModelPlatformApiRequestCosts": {
        "type": "object",
        "properties": {
          "request": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991,
            "description": "What one ordinary call costs."
          },
          "ai_generation": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991,
            "description": "What generating a form from a prompt costs."
          }
        },
        "required": [
          "request",
          "ai_generation"
        ]
      },
      "ModelPlatformApiUsage": {
        "type": "object",
        "properties": {
          "plan": {
            "description": "The plan whose numbers the budget is running on right now.",
            "$ref": "#/components/schemas/ModelSubscriptionPlanTypes"
          },
          "burst": {
            "description": "The API Burst policy and its live state.",
            "$ref": "#/components/schemas/ModelPlatformApiBurstUsage"
          },
          "minute": {
            "description": "The API Minute Cap policy and its live state.",
            "$ref": "#/components/schemas/ModelPlatformApiMinuteUsage"
          },
          "costs": {
            "description": "What each kind of call costs in credits.",
            "$ref": "#/components/schemas/ModelPlatformApiRequestCosts"
          },
          "degraded": {
            "type": "boolean",
            "description": "True when the numbers came from a per-process fallback because the shared counter was unreachable. Treat them as approximate."
          }
        },
        "required": [
          "plan",
          "burst",
          "minute",
          "costs",
          "degraded"
        ]
      },
      "ModelPlatformCalculatedValueDeclarationsInput": {
        "maxItems": 50,
        "type": "array",
        "items": {
          "type": "object",
          "properties": {
            "public_id": {
              "description": "Public ID of the Calculated value, unique within the form. 1-22 URL-safe characters.",
              "$ref": "#/components/schemas/ModelCalculatedValuePublicIdInput"
            },
            "name": {
              "description": "Name shown in the editor and in formulas. Unique within the form.",
              "$ref": "#/components/schemas/ModelCalculatedValueNameInput"
            },
            "type": {
              "description": "Whether the value holds a number or text.",
              "$ref": "#/components/schemas/ModelCalculatedValueTypeInput"
            },
            "initial_value": {
              "description": "The starting value as a string. Defaults to 0 for numbers and empty text.",
              "anyOf": [
                {
                  "$ref": "#/components/schemas/ModelCalculatedValueInitialValueInput"
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "public_id",
            "name",
            "type"
          ],
          "additionalProperties": false
        }
      },
      "ModelPlatformCanonicalBlueprint": {
        "type": "object",
        "properties": {
          "public_id": {
            "description": "Public ID of the form (10 characters). Read-only: assigned by the server on create and ignored on write.",
            "readOnly": true,
            "$ref": "#/components/schemas/ModelFormPublicId"
          },
          "name": {
            "type": "string",
            "description": "Form name shown in the app."
          },
          "is_template": {
            "type": "boolean",
            "description": "Whether the resource is a Private Template. Read-only on draft writes; honored when creating a form.",
            "readOnly": true
          },
          "hidden_values": {
            "description": "Hidden value declarations that respondents can supply through URL parameters.",
            "$ref": "#/components/schemas/ModelHiddenValueDeclarations"
          },
          "logic_rules": {
            "description": "Conditional logic rules in evaluation order. Rules show, hide, require, or skip to pages, update Calculated values, and redirect (Pro) based on answers, Hidden values, and Calculated values. Rule, condition, and action IDs are 1-22 URL-safe characters chosen by the client and must stay stable.",
            "$ref": "#/components/schemas/ModelLogicRules"
          },
          "calculated_values": {
            "description": "Calculated values that logic rules update and that pipes and conditions read, in display order.",
            "$ref": "#/components/schemas/ModelCalculatedValueDeclarations"
          },
          "pages": {
            "minItems": 1,
            "maxItems": 100,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ModelPlatformCanonicalBlueprintPage"
            },
            "description": "Pages in display order. Array order is canonical: the server renumbers page and node order on write."
          },
          "settings": {
            "description": "Notification settings of the form. A key left out on a draft write keeps its stored value; a key left out on create receives its default.",
            "$ref": "#/components/schemas/ModelPlatformCanonicalBlueprintSettings"
          },
          "properties": {
            "description": "Behavior and search-engine properties of the form. A key left out on a draft write keeps its stored value; a key left out on create receives its default.",
            "$ref": "#/components/schemas/ModelPlatformCanonicalBlueprintProperties"
          },
          "access": {
            "description": "Whether the form accepts submissions. Read-only: owned by the close, reopen, and access operations.",
            "readOnly": true,
            "$ref": "#/components/schemas/ModelPlatformCanonicalBlueprintAccess"
          },
          "styles": {
            "description": "Theme applied to the form. Only theme_id is writable: on create and on a draft write. Override properties are edited in the app.",
            "$ref": "#/components/schemas/ModelPlatformCanonicalBlueprintStyles"
          }
        },
        "required": [
          "public_id",
          "name",
          "is_template",
          "hidden_values",
          "logic_rules",
          "calculated_values",
          "pages",
          "settings",
          "properties",
          "access",
          "styles"
        ]
      },
      "ModelPlatformCanonicalBlueprintAccess": {
        "type": "object",
        "properties": {
          "is_closed": {
            "description": "Whether the form is closed to new submissions.",
            "$ref": "#/components/schemas/ModelNullableBooleanAsInt"
          },
          "close_at": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelDate"
              },
              {
                "type": "null"
              }
            ],
            "description": "When the form stops accepting submissions, or null."
          },
          "open_at": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelDate"
              },
              {
                "type": "null"
              }
            ],
            "description": "When the form starts accepting submissions, or null."
          },
          "duplicate_response_rule": {
            "$ref": "#/components/schemas/ModelPlatformDuplicateResponseRule"
          }
        },
        "required": [
          "is_closed",
          "close_at",
          "open_at",
          "duplicate_response_rule"
        ]
      },
      "ModelPlatformCanonicalBlueprintNode": {
        "oneOf": [
          {
            "$ref": "#/components/schemas/ModelPlatformCanonicalBlueprintNodeActions"
          },
          {
            "$ref": "#/components/schemas/ModelPlatformCanonicalBlueprintNodeTextInputShort"
          },
          {
            "$ref": "#/components/schemas/ModelPlatformCanonicalBlueprintNodeTextInputLong"
          },
          {
            "$ref": "#/components/schemas/ModelPlatformCanonicalBlueprintNodeTextInputEmail"
          },
          {
            "$ref": "#/components/schemas/ModelPlatformCanonicalBlueprintNodeTextInputLink"
          },
          {
            "$ref": "#/components/schemas/ModelPlatformCanonicalBlueprintNodeNumberInput"
          },
          {
            "$ref": "#/components/schemas/ModelPlatformCanonicalBlueprintNodePhoneNumberInput"
          },
          {
            "$ref": "#/components/schemas/ModelPlatformCanonicalBlueprintNodeFileUpload"
          },
          {
            "$ref": "#/components/schemas/ModelPlatformCanonicalBlueprintNodeSwitch"
          },
          {
            "$ref": "#/components/schemas/ModelPlatformCanonicalBlueprintNodeCheckbox"
          },
          {
            "$ref": "#/components/schemas/ModelPlatformCanonicalBlueprintNodeDropdown"
          },
          {
            "$ref": "#/components/schemas/ModelPlatformCanonicalBlueprintNodeDropdownMultiselect"
          },
          {
            "$ref": "#/components/schemas/ModelPlatformCanonicalBlueprintNodeMultipleChoice"
          },
          {
            "$ref": "#/components/schemas/ModelPlatformCanonicalBlueprintNodeCheckboxChoice"
          },
          {
            "$ref": "#/components/schemas/ModelPlatformCanonicalBlueprintNodeYesNo"
          },
          {
            "$ref": "#/components/schemas/ModelPlatformCanonicalBlueprintNodeRanking"
          },
          {
            "$ref": "#/components/schemas/ModelPlatformCanonicalBlueprintNodeSlider"
          },
          {
            "$ref": "#/components/schemas/ModelPlatformCanonicalBlueprintNodeRating"
          },
          {
            "$ref": "#/components/schemas/ModelPlatformCanonicalBlueprintNodeRatingNumber"
          },
          {
            "$ref": "#/components/schemas/ModelPlatformCanonicalBlueprintNodeNps"
          },
          {
            "$ref": "#/components/schemas/ModelPlatformCanonicalBlueprintNodeDatePicker"
          },
          {
            "$ref": "#/components/schemas/ModelPlatformCanonicalBlueprintNodeTimePicker"
          },
          {
            "$ref": "#/components/schemas/ModelPlatformCanonicalBlueprintNodeDateTimePicker"
          },
          {
            "$ref": "#/components/schemas/ModelPlatformCanonicalBlueprintNodeDateRangePicker"
          },
          {
            "$ref": "#/components/schemas/ModelPlatformCanonicalBlueprintNodeText"
          },
          {
            "$ref": "#/components/schemas/ModelPlatformCanonicalBlueprintNodeImage"
          },
          {
            "$ref": "#/components/schemas/ModelPlatformCanonicalBlueprintNodeMedia"
          },
          {
            "$ref": "#/components/schemas/ModelPlatformCanonicalBlueprintNodeDivider"
          },
          {
            "$ref": "#/components/schemas/ModelPlatformCanonicalBlueprintNodeLayoutRow"
          },
          {
            "$ref": "#/components/schemas/ModelPlatformCanonicalBlueprintNodeMatrix"
          },
          {
            "$ref": "#/components/schemas/ModelPlatformCanonicalBlueprintNodeFormTitle"
          },
          {
            "$ref": "#/components/schemas/ModelPlatformCanonicalBlueprintNodeProgressBar"
          },
          {
            "$ref": "#/components/schemas/ModelPlatformCanonicalBlueprintNodeThankYou"
          }
        ],
        "discriminator": {
          "propertyName": "type",
          "mapping": {
            "actions": "#/components/schemas/ModelPlatformCanonicalBlueprintNodeActions",
            "text_input_short": "#/components/schemas/ModelPlatformCanonicalBlueprintNodeTextInputShort",
            "text_input_long": "#/components/schemas/ModelPlatformCanonicalBlueprintNodeTextInputLong",
            "text_input_email": "#/components/schemas/ModelPlatformCanonicalBlueprintNodeTextInputEmail",
            "text_input_link": "#/components/schemas/ModelPlatformCanonicalBlueprintNodeTextInputLink",
            "number_input": "#/components/schemas/ModelPlatformCanonicalBlueprintNodeNumberInput",
            "phone_number_input": "#/components/schemas/ModelPlatformCanonicalBlueprintNodePhoneNumberInput",
            "file_upload": "#/components/schemas/ModelPlatformCanonicalBlueprintNodeFileUpload",
            "switch": "#/components/schemas/ModelPlatformCanonicalBlueprintNodeSwitch",
            "checkbox": "#/components/schemas/ModelPlatformCanonicalBlueprintNodeCheckbox",
            "dropdown": "#/components/schemas/ModelPlatformCanonicalBlueprintNodeDropdown",
            "dropdown_multiselect": "#/components/schemas/ModelPlatformCanonicalBlueprintNodeDropdownMultiselect",
            "multiple_choice": "#/components/schemas/ModelPlatformCanonicalBlueprintNodeMultipleChoice",
            "checkbox_choice": "#/components/schemas/ModelPlatformCanonicalBlueprintNodeCheckboxChoice",
            "yes_no": "#/components/schemas/ModelPlatformCanonicalBlueprintNodeYesNo",
            "ranking": "#/components/schemas/ModelPlatformCanonicalBlueprintNodeRanking",
            "slider": "#/components/schemas/ModelPlatformCanonicalBlueprintNodeSlider",
            "rating": "#/components/schemas/ModelPlatformCanonicalBlueprintNodeRating",
            "rating_number": "#/components/schemas/ModelPlatformCanonicalBlueprintNodeRatingNumber",
            "nps": "#/components/schemas/ModelPlatformCanonicalBlueprintNodeNps",
            "date_picker": "#/components/schemas/ModelPlatformCanonicalBlueprintNodeDatePicker",
            "time_picker": "#/components/schemas/ModelPlatformCanonicalBlueprintNodeTimePicker",
            "date_time_picker": "#/components/schemas/ModelPlatformCanonicalBlueprintNodeDateTimePicker",
            "date_range_picker": "#/components/schemas/ModelPlatformCanonicalBlueprintNodeDateRangePicker",
            "text": "#/components/schemas/ModelPlatformCanonicalBlueprintNodeText",
            "image": "#/components/schemas/ModelPlatformCanonicalBlueprintNodeImage",
            "media": "#/components/schemas/ModelPlatformCanonicalBlueprintNodeMedia",
            "divider": "#/components/schemas/ModelPlatformCanonicalBlueprintNodeDivider",
            "layout_row": "#/components/schemas/ModelPlatformCanonicalBlueprintNodeLayoutRow",
            "matrix": "#/components/schemas/ModelPlatformCanonicalBlueprintNodeMatrix",
            "form_title": "#/components/schemas/ModelPlatformCanonicalBlueprintNodeFormTitle",
            "progress_bar": "#/components/schemas/ModelPlatformCanonicalBlueprintNodeProgressBar",
            "thank_you": "#/components/schemas/ModelPlatformCanonicalBlueprintNodeThankYou"
          }
        }
      },
      "ModelPlatformCanonicalBlueprintNodeActions": {
        "type": "object",
        "properties": {
          "public_id": {
            "type": "string",
            "minLength": 4,
            "maxLength": 4,
            "pattern": "^[A-Za-z0-9_-]+$",
            "description": "Public ID of the node (4 characters). Always present on read."
          },
          "parent_node_id": {
            "anyOf": [
              {
                "type": "string",
                "minLength": 4,
                "maxLength": 4,
                "pattern": "^[A-Za-z0-9_-]+$"
              },
              {
                "type": "null"
              }
            ],
            "description": "Public ID of the layout row or question this node sits in, or null at the page root. Set together with column_index."
          },
          "column_index": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 2
              },
              {
                "type": "null"
              }
            ],
            "description": "Zero-based column inside the parent, or null at the page root. Set together with parent_node_id."
          },
          "sort_order": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991,
            "description": "Position among siblings in the same parent and column. Array order is canonical: the server renumbers from 1."
          },
          "is_hidden": {
            "type": "boolean",
            "description": "Whether the node is hidden: kept in the draft and absent from the published form."
          },
          "type": {
            "type": "string",
            "const": "actions",
            "description": "Node type key that selects the meta shape."
          },
          "meta": {
            "$ref": "#/components/schemas/ModelNodeMetaActions"
          }
        },
        "required": [
          "public_id",
          "parent_node_id",
          "column_index",
          "sort_order",
          "is_hidden",
          "type",
          "meta"
        ],
        "title": "actions"
      },
      "ModelPlatformCanonicalBlueprintNodeCheckbox": {
        "type": "object",
        "properties": {
          "public_id": {
            "type": "string",
            "minLength": 4,
            "maxLength": 4,
            "pattern": "^[A-Za-z0-9_-]+$",
            "description": "Public ID of the node (4 characters). Always present on read."
          },
          "parent_node_id": {
            "anyOf": [
              {
                "type": "string",
                "minLength": 4,
                "maxLength": 4,
                "pattern": "^[A-Za-z0-9_-]+$"
              },
              {
                "type": "null"
              }
            ],
            "description": "Public ID of the layout row or question this node sits in, or null at the page root. Set together with column_index."
          },
          "column_index": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 2
              },
              {
                "type": "null"
              }
            ],
            "description": "Zero-based column inside the parent, or null at the page root. Set together with parent_node_id."
          },
          "sort_order": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991,
            "description": "Position among siblings in the same parent and column. Array order is canonical: the server renumbers from 1."
          },
          "is_hidden": {
            "type": "boolean",
            "description": "Whether the node is hidden: kept in the draft and absent from the published form."
          },
          "type": {
            "type": "string",
            "const": "checkbox",
            "description": "Node type key that selects the meta shape."
          },
          "meta": {
            "$ref": "#/components/schemas/ModelNodeMetaCheckbox"
          }
        },
        "required": [
          "public_id",
          "parent_node_id",
          "column_index",
          "sort_order",
          "is_hidden",
          "type",
          "meta"
        ],
        "title": "checkbox"
      },
      "ModelPlatformCanonicalBlueprintNodeCheckboxChoice": {
        "type": "object",
        "properties": {
          "public_id": {
            "type": "string",
            "minLength": 4,
            "maxLength": 4,
            "pattern": "^[A-Za-z0-9_-]+$",
            "description": "Public ID of the node (4 characters). Always present on read."
          },
          "parent_node_id": {
            "anyOf": [
              {
                "type": "string",
                "minLength": 4,
                "maxLength": 4,
                "pattern": "^[A-Za-z0-9_-]+$"
              },
              {
                "type": "null"
              }
            ],
            "description": "Public ID of the layout row or question this node sits in, or null at the page root. Set together with column_index."
          },
          "column_index": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 2
              },
              {
                "type": "null"
              }
            ],
            "description": "Zero-based column inside the parent, or null at the page root. Set together with parent_node_id."
          },
          "sort_order": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991,
            "description": "Position among siblings in the same parent and column. Array order is canonical: the server renumbers from 1."
          },
          "is_hidden": {
            "type": "boolean",
            "description": "Whether the node is hidden: kept in the draft and absent from the published form."
          },
          "type": {
            "type": "string",
            "const": "checkbox_choice",
            "description": "Node type key that selects the meta shape."
          },
          "meta": {
            "$ref": "#/components/schemas/ModelNodeMetaCheckboxChoice"
          }
        },
        "required": [
          "public_id",
          "parent_node_id",
          "column_index",
          "sort_order",
          "is_hidden",
          "type",
          "meta"
        ],
        "title": "checkbox_choice"
      },
      "ModelPlatformCanonicalBlueprintNodeDatePicker": {
        "type": "object",
        "properties": {
          "public_id": {
            "type": "string",
            "minLength": 4,
            "maxLength": 4,
            "pattern": "^[A-Za-z0-9_-]+$",
            "description": "Public ID of the node (4 characters). Always present on read."
          },
          "parent_node_id": {
            "anyOf": [
              {
                "type": "string",
                "minLength": 4,
                "maxLength": 4,
                "pattern": "^[A-Za-z0-9_-]+$"
              },
              {
                "type": "null"
              }
            ],
            "description": "Public ID of the layout row or question this node sits in, or null at the page root. Set together with column_index."
          },
          "column_index": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 2
              },
              {
                "type": "null"
              }
            ],
            "description": "Zero-based column inside the parent, or null at the page root. Set together with parent_node_id."
          },
          "sort_order": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991,
            "description": "Position among siblings in the same parent and column. Array order is canonical: the server renumbers from 1."
          },
          "is_hidden": {
            "type": "boolean",
            "description": "Whether the node is hidden: kept in the draft and absent from the published form."
          },
          "type": {
            "type": "string",
            "const": "date_picker",
            "description": "Node type key that selects the meta shape."
          },
          "meta": {
            "$ref": "#/components/schemas/ModelNodeMetaDatePicker"
          }
        },
        "required": [
          "public_id",
          "parent_node_id",
          "column_index",
          "sort_order",
          "is_hidden",
          "type",
          "meta"
        ],
        "title": "date_picker"
      },
      "ModelPlatformCanonicalBlueprintNodeDateRangePicker": {
        "type": "object",
        "properties": {
          "public_id": {
            "type": "string",
            "minLength": 4,
            "maxLength": 4,
            "pattern": "^[A-Za-z0-9_-]+$",
            "description": "Public ID of the node (4 characters). Always present on read."
          },
          "parent_node_id": {
            "anyOf": [
              {
                "type": "string",
                "minLength": 4,
                "maxLength": 4,
                "pattern": "^[A-Za-z0-9_-]+$"
              },
              {
                "type": "null"
              }
            ],
            "description": "Public ID of the layout row or question this node sits in, or null at the page root. Set together with column_index."
          },
          "column_index": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 2
              },
              {
                "type": "null"
              }
            ],
            "description": "Zero-based column inside the parent, or null at the page root. Set together with parent_node_id."
          },
          "sort_order": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991,
            "description": "Position among siblings in the same parent and column. Array order is canonical: the server renumbers from 1."
          },
          "is_hidden": {
            "type": "boolean",
            "description": "Whether the node is hidden: kept in the draft and absent from the published form."
          },
          "type": {
            "type": "string",
            "const": "date_range_picker",
            "description": "Node type key that selects the meta shape."
          },
          "meta": {
            "$ref": "#/components/schemas/ModelNodeMetaDateRangePicker"
          }
        },
        "required": [
          "public_id",
          "parent_node_id",
          "column_index",
          "sort_order",
          "is_hidden",
          "type",
          "meta"
        ],
        "title": "date_range_picker"
      },
      "ModelPlatformCanonicalBlueprintNodeDateTimePicker": {
        "type": "object",
        "properties": {
          "public_id": {
            "type": "string",
            "minLength": 4,
            "maxLength": 4,
            "pattern": "^[A-Za-z0-9_-]+$",
            "description": "Public ID of the node (4 characters). Always present on read."
          },
          "parent_node_id": {
            "anyOf": [
              {
                "type": "string",
                "minLength": 4,
                "maxLength": 4,
                "pattern": "^[A-Za-z0-9_-]+$"
              },
              {
                "type": "null"
              }
            ],
            "description": "Public ID of the layout row or question this node sits in, or null at the page root. Set together with column_index."
          },
          "column_index": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 2
              },
              {
                "type": "null"
              }
            ],
            "description": "Zero-based column inside the parent, or null at the page root. Set together with parent_node_id."
          },
          "sort_order": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991,
            "description": "Position among siblings in the same parent and column. Array order is canonical: the server renumbers from 1."
          },
          "is_hidden": {
            "type": "boolean",
            "description": "Whether the node is hidden: kept in the draft and absent from the published form."
          },
          "type": {
            "type": "string",
            "const": "date_time_picker",
            "description": "Node type key that selects the meta shape."
          },
          "meta": {
            "$ref": "#/components/schemas/ModelNodeMetaDateTimePicker"
          }
        },
        "required": [
          "public_id",
          "parent_node_id",
          "column_index",
          "sort_order",
          "is_hidden",
          "type",
          "meta"
        ],
        "title": "date_time_picker"
      },
      "ModelPlatformCanonicalBlueprintNodeDivider": {
        "type": "object",
        "properties": {
          "public_id": {
            "type": "string",
            "minLength": 4,
            "maxLength": 4,
            "pattern": "^[A-Za-z0-9_-]+$",
            "description": "Public ID of the node (4 characters). Always present on read."
          },
          "parent_node_id": {
            "anyOf": [
              {
                "type": "string",
                "minLength": 4,
                "maxLength": 4,
                "pattern": "^[A-Za-z0-9_-]+$"
              },
              {
                "type": "null"
              }
            ],
            "description": "Public ID of the layout row or question this node sits in, or null at the page root. Set together with column_index."
          },
          "column_index": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 2
              },
              {
                "type": "null"
              }
            ],
            "description": "Zero-based column inside the parent, or null at the page root. Set together with parent_node_id."
          },
          "sort_order": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991,
            "description": "Position among siblings in the same parent and column. Array order is canonical: the server renumbers from 1."
          },
          "is_hidden": {
            "type": "boolean",
            "description": "Whether the node is hidden: kept in the draft and absent from the published form."
          },
          "type": {
            "type": "string",
            "const": "divider",
            "description": "Node type key that selects the meta shape."
          },
          "meta": {
            "$ref": "#/components/schemas/ModelNodeMetaDivider"
          }
        },
        "required": [
          "public_id",
          "parent_node_id",
          "column_index",
          "sort_order",
          "is_hidden",
          "type",
          "meta"
        ],
        "title": "divider"
      },
      "ModelPlatformCanonicalBlueprintNodeDropdown": {
        "type": "object",
        "properties": {
          "public_id": {
            "type": "string",
            "minLength": 4,
            "maxLength": 4,
            "pattern": "^[A-Za-z0-9_-]+$",
            "description": "Public ID of the node (4 characters). Always present on read."
          },
          "parent_node_id": {
            "anyOf": [
              {
                "type": "string",
                "minLength": 4,
                "maxLength": 4,
                "pattern": "^[A-Za-z0-9_-]+$"
              },
              {
                "type": "null"
              }
            ],
            "description": "Public ID of the layout row or question this node sits in, or null at the page root. Set together with column_index."
          },
          "column_index": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 2
              },
              {
                "type": "null"
              }
            ],
            "description": "Zero-based column inside the parent, or null at the page root. Set together with parent_node_id."
          },
          "sort_order": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991,
            "description": "Position among siblings in the same parent and column. Array order is canonical: the server renumbers from 1."
          },
          "is_hidden": {
            "type": "boolean",
            "description": "Whether the node is hidden: kept in the draft and absent from the published form."
          },
          "type": {
            "type": "string",
            "const": "dropdown",
            "description": "Node type key that selects the meta shape."
          },
          "meta": {
            "$ref": "#/components/schemas/ModelNodeMetaDropdown"
          }
        },
        "required": [
          "public_id",
          "parent_node_id",
          "column_index",
          "sort_order",
          "is_hidden",
          "type",
          "meta"
        ],
        "title": "dropdown"
      },
      "ModelPlatformCanonicalBlueprintNodeDropdownMultiselect": {
        "type": "object",
        "properties": {
          "public_id": {
            "type": "string",
            "minLength": 4,
            "maxLength": 4,
            "pattern": "^[A-Za-z0-9_-]+$",
            "description": "Public ID of the node (4 characters). Always present on read."
          },
          "parent_node_id": {
            "anyOf": [
              {
                "type": "string",
                "minLength": 4,
                "maxLength": 4,
                "pattern": "^[A-Za-z0-9_-]+$"
              },
              {
                "type": "null"
              }
            ],
            "description": "Public ID of the layout row or question this node sits in, or null at the page root. Set together with column_index."
          },
          "column_index": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 2
              },
              {
                "type": "null"
              }
            ],
            "description": "Zero-based column inside the parent, or null at the page root. Set together with parent_node_id."
          },
          "sort_order": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991,
            "description": "Position among siblings in the same parent and column. Array order is canonical: the server renumbers from 1."
          },
          "is_hidden": {
            "type": "boolean",
            "description": "Whether the node is hidden: kept in the draft and absent from the published form."
          },
          "type": {
            "type": "string",
            "const": "dropdown_multiselect",
            "description": "Node type key that selects the meta shape."
          },
          "meta": {
            "$ref": "#/components/schemas/ModelNodeMetaDropdownMultiselect"
          }
        },
        "required": [
          "public_id",
          "parent_node_id",
          "column_index",
          "sort_order",
          "is_hidden",
          "type",
          "meta"
        ],
        "title": "dropdown_multiselect"
      },
      "ModelPlatformCanonicalBlueprintNodeFileUpload": {
        "type": "object",
        "properties": {
          "public_id": {
            "type": "string",
            "minLength": 4,
            "maxLength": 4,
            "pattern": "^[A-Za-z0-9_-]+$",
            "description": "Public ID of the node (4 characters). Always present on read."
          },
          "parent_node_id": {
            "anyOf": [
              {
                "type": "string",
                "minLength": 4,
                "maxLength": 4,
                "pattern": "^[A-Za-z0-9_-]+$"
              },
              {
                "type": "null"
              }
            ],
            "description": "Public ID of the layout row or question this node sits in, or null at the page root. Set together with column_index."
          },
          "column_index": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 2
              },
              {
                "type": "null"
              }
            ],
            "description": "Zero-based column inside the parent, or null at the page root. Set together with parent_node_id."
          },
          "sort_order": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991,
            "description": "Position among siblings in the same parent and column. Array order is canonical: the server renumbers from 1."
          },
          "is_hidden": {
            "type": "boolean",
            "description": "Whether the node is hidden: kept in the draft and absent from the published form."
          },
          "type": {
            "type": "string",
            "const": "file_upload",
            "description": "Node type key that selects the meta shape."
          },
          "meta": {
            "$ref": "#/components/schemas/ModelNodeMetaFileUpload"
          }
        },
        "required": [
          "public_id",
          "parent_node_id",
          "column_index",
          "sort_order",
          "is_hidden",
          "type",
          "meta"
        ],
        "title": "file_upload"
      },
      "ModelPlatformCanonicalBlueprintNodeFormTitle": {
        "type": "object",
        "properties": {
          "public_id": {
            "type": "string",
            "minLength": 4,
            "maxLength": 4,
            "pattern": "^[A-Za-z0-9_-]+$",
            "description": "Public ID of the node (4 characters). Always present on read."
          },
          "parent_node_id": {
            "anyOf": [
              {
                "type": "string",
                "minLength": 4,
                "maxLength": 4,
                "pattern": "^[A-Za-z0-9_-]+$"
              },
              {
                "type": "null"
              }
            ],
            "description": "Public ID of the layout row or question this node sits in, or null at the page root. Set together with column_index."
          },
          "column_index": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 2
              },
              {
                "type": "null"
              }
            ],
            "description": "Zero-based column inside the parent, or null at the page root. Set together with parent_node_id."
          },
          "sort_order": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991,
            "description": "Position among siblings in the same parent and column. Array order is canonical: the server renumbers from 1."
          },
          "is_hidden": {
            "type": "boolean",
            "description": "Whether the node is hidden: kept in the draft and absent from the published form."
          },
          "type": {
            "type": "string",
            "const": "form_title",
            "description": "Node type key that selects the meta shape."
          },
          "meta": {
            "$ref": "#/components/schemas/ModelNodeMetaFormTitle"
          }
        },
        "required": [
          "public_id",
          "parent_node_id",
          "column_index",
          "sort_order",
          "is_hidden",
          "type",
          "meta"
        ],
        "title": "form_title"
      },
      "ModelPlatformCanonicalBlueprintNodeImage": {
        "type": "object",
        "properties": {
          "public_id": {
            "type": "string",
            "minLength": 4,
            "maxLength": 4,
            "pattern": "^[A-Za-z0-9_-]+$",
            "description": "Public ID of the node (4 characters). Always present on read."
          },
          "parent_node_id": {
            "anyOf": [
              {
                "type": "string",
                "minLength": 4,
                "maxLength": 4,
                "pattern": "^[A-Za-z0-9_-]+$"
              },
              {
                "type": "null"
              }
            ],
            "description": "Public ID of the layout row or question this node sits in, or null at the page root. Set together with column_index."
          },
          "column_index": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 2
              },
              {
                "type": "null"
              }
            ],
            "description": "Zero-based column inside the parent, or null at the page root. Set together with parent_node_id."
          },
          "sort_order": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991,
            "description": "Position among siblings in the same parent and column. Array order is canonical: the server renumbers from 1."
          },
          "is_hidden": {
            "type": "boolean",
            "description": "Whether the node is hidden: kept in the draft and absent from the published form."
          },
          "type": {
            "type": "string",
            "const": "image",
            "description": "Node type key that selects the meta shape."
          },
          "meta": {
            "$ref": "#/components/schemas/ModelNodeMetaImage"
          }
        },
        "required": [
          "public_id",
          "parent_node_id",
          "column_index",
          "sort_order",
          "is_hidden",
          "type",
          "meta"
        ],
        "title": "image"
      },
      "ModelPlatformCanonicalBlueprintNodeLayoutRow": {
        "type": "object",
        "properties": {
          "public_id": {
            "type": "string",
            "minLength": 4,
            "maxLength": 4,
            "pattern": "^[A-Za-z0-9_-]+$",
            "description": "Public ID of the node (4 characters). Always present on read."
          },
          "parent_node_id": {
            "anyOf": [
              {
                "type": "string",
                "minLength": 4,
                "maxLength": 4,
                "pattern": "^[A-Za-z0-9_-]+$"
              },
              {
                "type": "null"
              }
            ],
            "description": "Public ID of the layout row or question this node sits in, or null at the page root. Set together with column_index."
          },
          "column_index": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 2
              },
              {
                "type": "null"
              }
            ],
            "description": "Zero-based column inside the parent, or null at the page root. Set together with parent_node_id."
          },
          "sort_order": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991,
            "description": "Position among siblings in the same parent and column. Array order is canonical: the server renumbers from 1."
          },
          "is_hidden": {
            "type": "boolean",
            "description": "Whether the node is hidden: kept in the draft and absent from the published form."
          },
          "type": {
            "type": "string",
            "const": "layout_row",
            "description": "Node type key that selects the meta shape."
          },
          "meta": {
            "$ref": "#/components/schemas/ModelNodeMetaLayoutRow"
          }
        },
        "required": [
          "public_id",
          "parent_node_id",
          "column_index",
          "sort_order",
          "is_hidden",
          "type",
          "meta"
        ],
        "title": "layout_row"
      },
      "ModelPlatformCanonicalBlueprintNodeMatrix": {
        "type": "object",
        "properties": {
          "public_id": {
            "type": "string",
            "minLength": 4,
            "maxLength": 4,
            "pattern": "^[A-Za-z0-9_-]+$",
            "description": "Public ID of the node (4 characters). Always present on read."
          },
          "parent_node_id": {
            "anyOf": [
              {
                "type": "string",
                "minLength": 4,
                "maxLength": 4,
                "pattern": "^[A-Za-z0-9_-]+$"
              },
              {
                "type": "null"
              }
            ],
            "description": "Public ID of the layout row or question this node sits in, or null at the page root. Set together with column_index."
          },
          "column_index": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 2
              },
              {
                "type": "null"
              }
            ],
            "description": "Zero-based column inside the parent, or null at the page root. Set together with parent_node_id."
          },
          "sort_order": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991,
            "description": "Position among siblings in the same parent and column. Array order is canonical: the server renumbers from 1."
          },
          "is_hidden": {
            "type": "boolean",
            "description": "Whether the node is hidden: kept in the draft and absent from the published form."
          },
          "type": {
            "type": "string",
            "const": "matrix",
            "description": "Node type key that selects the meta shape."
          },
          "meta": {
            "$ref": "#/components/schemas/ModelNodeMetaMatrix"
          }
        },
        "required": [
          "public_id",
          "parent_node_id",
          "column_index",
          "sort_order",
          "is_hidden",
          "type",
          "meta"
        ],
        "title": "matrix"
      },
      "ModelPlatformCanonicalBlueprintNodeMedia": {
        "type": "object",
        "properties": {
          "public_id": {
            "type": "string",
            "minLength": 4,
            "maxLength": 4,
            "pattern": "^[A-Za-z0-9_-]+$",
            "description": "Public ID of the node (4 characters). Always present on read."
          },
          "parent_node_id": {
            "anyOf": [
              {
                "type": "string",
                "minLength": 4,
                "maxLength": 4,
                "pattern": "^[A-Za-z0-9_-]+$"
              },
              {
                "type": "null"
              }
            ],
            "description": "Public ID of the layout row or question this node sits in, or null at the page root. Set together with column_index."
          },
          "column_index": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 2
              },
              {
                "type": "null"
              }
            ],
            "description": "Zero-based column inside the parent, or null at the page root. Set together with parent_node_id."
          },
          "sort_order": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991,
            "description": "Position among siblings in the same parent and column. Array order is canonical: the server renumbers from 1."
          },
          "is_hidden": {
            "type": "boolean",
            "description": "Whether the node is hidden: kept in the draft and absent from the published form."
          },
          "type": {
            "type": "string",
            "const": "media",
            "description": "Node type key that selects the meta shape."
          },
          "meta": {
            "$ref": "#/components/schemas/ModelPlatformCanonicalNodeMetaMedia"
          }
        },
        "required": [
          "public_id",
          "parent_node_id",
          "column_index",
          "sort_order",
          "is_hidden",
          "type",
          "meta"
        ],
        "title": "media"
      },
      "ModelPlatformCanonicalBlueprintNodeMultipleChoice": {
        "type": "object",
        "properties": {
          "public_id": {
            "type": "string",
            "minLength": 4,
            "maxLength": 4,
            "pattern": "^[A-Za-z0-9_-]+$",
            "description": "Public ID of the node (4 characters). Always present on read."
          },
          "parent_node_id": {
            "anyOf": [
              {
                "type": "string",
                "minLength": 4,
                "maxLength": 4,
                "pattern": "^[A-Za-z0-9_-]+$"
              },
              {
                "type": "null"
              }
            ],
            "description": "Public ID of the layout row or question this node sits in, or null at the page root. Set together with column_index."
          },
          "column_index": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 2
              },
              {
                "type": "null"
              }
            ],
            "description": "Zero-based column inside the parent, or null at the page root. Set together with parent_node_id."
          },
          "sort_order": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991,
            "description": "Position among siblings in the same parent and column. Array order is canonical: the server renumbers from 1."
          },
          "is_hidden": {
            "type": "boolean",
            "description": "Whether the node is hidden: kept in the draft and absent from the published form."
          },
          "type": {
            "type": "string",
            "const": "multiple_choice",
            "description": "Node type key that selects the meta shape."
          },
          "meta": {
            "$ref": "#/components/schemas/ModelNodeMetaMultipleChoice"
          }
        },
        "required": [
          "public_id",
          "parent_node_id",
          "column_index",
          "sort_order",
          "is_hidden",
          "type",
          "meta"
        ],
        "title": "multiple_choice"
      },
      "ModelPlatformCanonicalBlueprintNodeNps": {
        "type": "object",
        "properties": {
          "public_id": {
            "type": "string",
            "minLength": 4,
            "maxLength": 4,
            "pattern": "^[A-Za-z0-9_-]+$",
            "description": "Public ID of the node (4 characters). Always present on read."
          },
          "parent_node_id": {
            "anyOf": [
              {
                "type": "string",
                "minLength": 4,
                "maxLength": 4,
                "pattern": "^[A-Za-z0-9_-]+$"
              },
              {
                "type": "null"
              }
            ],
            "description": "Public ID of the layout row or question this node sits in, or null at the page root. Set together with column_index."
          },
          "column_index": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 2
              },
              {
                "type": "null"
              }
            ],
            "description": "Zero-based column inside the parent, or null at the page root. Set together with parent_node_id."
          },
          "sort_order": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991,
            "description": "Position among siblings in the same parent and column. Array order is canonical: the server renumbers from 1."
          },
          "is_hidden": {
            "type": "boolean",
            "description": "Whether the node is hidden: kept in the draft and absent from the published form."
          },
          "type": {
            "type": "string",
            "const": "nps",
            "description": "Node type key that selects the meta shape."
          },
          "meta": {
            "$ref": "#/components/schemas/ModelNodeMetaNps"
          }
        },
        "required": [
          "public_id",
          "parent_node_id",
          "column_index",
          "sort_order",
          "is_hidden",
          "type",
          "meta"
        ],
        "title": "nps"
      },
      "ModelPlatformCanonicalBlueprintNodeNumberInput": {
        "type": "object",
        "properties": {
          "public_id": {
            "type": "string",
            "minLength": 4,
            "maxLength": 4,
            "pattern": "^[A-Za-z0-9_-]+$",
            "description": "Public ID of the node (4 characters). Always present on read."
          },
          "parent_node_id": {
            "anyOf": [
              {
                "type": "string",
                "minLength": 4,
                "maxLength": 4,
                "pattern": "^[A-Za-z0-9_-]+$"
              },
              {
                "type": "null"
              }
            ],
            "description": "Public ID of the layout row or question this node sits in, or null at the page root. Set together with column_index."
          },
          "column_index": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 2
              },
              {
                "type": "null"
              }
            ],
            "description": "Zero-based column inside the parent, or null at the page root. Set together with parent_node_id."
          },
          "sort_order": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991,
            "description": "Position among siblings in the same parent and column. Array order is canonical: the server renumbers from 1."
          },
          "is_hidden": {
            "type": "boolean",
            "description": "Whether the node is hidden: kept in the draft and absent from the published form."
          },
          "type": {
            "type": "string",
            "const": "number_input",
            "description": "Node type key that selects the meta shape."
          },
          "meta": {
            "$ref": "#/components/schemas/ModelNodeMetaNumberInput"
          }
        },
        "required": [
          "public_id",
          "parent_node_id",
          "column_index",
          "sort_order",
          "is_hidden",
          "type",
          "meta"
        ],
        "title": "number_input"
      },
      "ModelPlatformCanonicalBlueprintNodePhoneNumberInput": {
        "type": "object",
        "properties": {
          "public_id": {
            "type": "string",
            "minLength": 4,
            "maxLength": 4,
            "pattern": "^[A-Za-z0-9_-]+$",
            "description": "Public ID of the node (4 characters). Always present on read."
          },
          "parent_node_id": {
            "anyOf": [
              {
                "type": "string",
                "minLength": 4,
                "maxLength": 4,
                "pattern": "^[A-Za-z0-9_-]+$"
              },
              {
                "type": "null"
              }
            ],
            "description": "Public ID of the layout row or question this node sits in, or null at the page root. Set together with column_index."
          },
          "column_index": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 2
              },
              {
                "type": "null"
              }
            ],
            "description": "Zero-based column inside the parent, or null at the page root. Set together with parent_node_id."
          },
          "sort_order": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991,
            "description": "Position among siblings in the same parent and column. Array order is canonical: the server renumbers from 1."
          },
          "is_hidden": {
            "type": "boolean",
            "description": "Whether the node is hidden: kept in the draft and absent from the published form."
          },
          "type": {
            "type": "string",
            "const": "phone_number_input",
            "description": "Node type key that selects the meta shape."
          },
          "meta": {
            "$ref": "#/components/schemas/ModelNodeMetaPhoneNumberInput"
          }
        },
        "required": [
          "public_id",
          "parent_node_id",
          "column_index",
          "sort_order",
          "is_hidden",
          "type",
          "meta"
        ],
        "title": "phone_number_input"
      },
      "ModelPlatformCanonicalBlueprintNodeProgressBar": {
        "type": "object",
        "properties": {
          "public_id": {
            "type": "string",
            "minLength": 4,
            "maxLength": 4,
            "pattern": "^[A-Za-z0-9_-]+$",
            "description": "Public ID of the node (4 characters). Always present on read."
          },
          "parent_node_id": {
            "anyOf": [
              {
                "type": "string",
                "minLength": 4,
                "maxLength": 4,
                "pattern": "^[A-Za-z0-9_-]+$"
              },
              {
                "type": "null"
              }
            ],
            "description": "Public ID of the layout row or question this node sits in, or null at the page root. Set together with column_index."
          },
          "column_index": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 2
              },
              {
                "type": "null"
              }
            ],
            "description": "Zero-based column inside the parent, or null at the page root. Set together with parent_node_id."
          },
          "sort_order": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991,
            "description": "Position among siblings in the same parent and column. Array order is canonical: the server renumbers from 1."
          },
          "is_hidden": {
            "type": "boolean",
            "description": "Whether the node is hidden: kept in the draft and absent from the published form."
          },
          "type": {
            "type": "string",
            "const": "progress_bar",
            "description": "Node type key that selects the meta shape."
          },
          "meta": {
            "$ref": "#/components/schemas/ModelNodeMetaProgressBar"
          }
        },
        "required": [
          "public_id",
          "parent_node_id",
          "column_index",
          "sort_order",
          "is_hidden",
          "type",
          "meta"
        ],
        "title": "progress_bar"
      },
      "ModelPlatformCanonicalBlueprintNodeRanking": {
        "type": "object",
        "properties": {
          "public_id": {
            "type": "string",
            "minLength": 4,
            "maxLength": 4,
            "pattern": "^[A-Za-z0-9_-]+$",
            "description": "Public ID of the node (4 characters). Always present on read."
          },
          "parent_node_id": {
            "anyOf": [
              {
                "type": "string",
                "minLength": 4,
                "maxLength": 4,
                "pattern": "^[A-Za-z0-9_-]+$"
              },
              {
                "type": "null"
              }
            ],
            "description": "Public ID of the layout row or question this node sits in, or null at the page root. Set together with column_index."
          },
          "column_index": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 2
              },
              {
                "type": "null"
              }
            ],
            "description": "Zero-based column inside the parent, or null at the page root. Set together with parent_node_id."
          },
          "sort_order": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991,
            "description": "Position among siblings in the same parent and column. Array order is canonical: the server renumbers from 1."
          },
          "is_hidden": {
            "type": "boolean",
            "description": "Whether the node is hidden: kept in the draft and absent from the published form."
          },
          "type": {
            "type": "string",
            "const": "ranking",
            "description": "Node type key that selects the meta shape."
          },
          "meta": {
            "$ref": "#/components/schemas/ModelNodeMetaRanking"
          }
        },
        "required": [
          "public_id",
          "parent_node_id",
          "column_index",
          "sort_order",
          "is_hidden",
          "type",
          "meta"
        ],
        "title": "ranking"
      },
      "ModelPlatformCanonicalBlueprintNodeRating": {
        "type": "object",
        "properties": {
          "public_id": {
            "type": "string",
            "minLength": 4,
            "maxLength": 4,
            "pattern": "^[A-Za-z0-9_-]+$",
            "description": "Public ID of the node (4 characters). Always present on read."
          },
          "parent_node_id": {
            "anyOf": [
              {
                "type": "string",
                "minLength": 4,
                "maxLength": 4,
                "pattern": "^[A-Za-z0-9_-]+$"
              },
              {
                "type": "null"
              }
            ],
            "description": "Public ID of the layout row or question this node sits in, or null at the page root. Set together with column_index."
          },
          "column_index": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 2
              },
              {
                "type": "null"
              }
            ],
            "description": "Zero-based column inside the parent, or null at the page root. Set together with parent_node_id."
          },
          "sort_order": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991,
            "description": "Position among siblings in the same parent and column. Array order is canonical: the server renumbers from 1."
          },
          "is_hidden": {
            "type": "boolean",
            "description": "Whether the node is hidden: kept in the draft and absent from the published form."
          },
          "type": {
            "type": "string",
            "const": "rating",
            "description": "Node type key that selects the meta shape."
          },
          "meta": {
            "$ref": "#/components/schemas/ModelNodeMetaRating"
          }
        },
        "required": [
          "public_id",
          "parent_node_id",
          "column_index",
          "sort_order",
          "is_hidden",
          "type",
          "meta"
        ],
        "title": "rating"
      },
      "ModelPlatformCanonicalBlueprintNodeRatingNumber": {
        "type": "object",
        "properties": {
          "public_id": {
            "type": "string",
            "minLength": 4,
            "maxLength": 4,
            "pattern": "^[A-Za-z0-9_-]+$",
            "description": "Public ID of the node (4 characters). Always present on read."
          },
          "parent_node_id": {
            "anyOf": [
              {
                "type": "string",
                "minLength": 4,
                "maxLength": 4,
                "pattern": "^[A-Za-z0-9_-]+$"
              },
              {
                "type": "null"
              }
            ],
            "description": "Public ID of the layout row or question this node sits in, or null at the page root. Set together with column_index."
          },
          "column_index": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 2
              },
              {
                "type": "null"
              }
            ],
            "description": "Zero-based column inside the parent, or null at the page root. Set together with parent_node_id."
          },
          "sort_order": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991,
            "description": "Position among siblings in the same parent and column. Array order is canonical: the server renumbers from 1."
          },
          "is_hidden": {
            "type": "boolean",
            "description": "Whether the node is hidden: kept in the draft and absent from the published form."
          },
          "type": {
            "type": "string",
            "const": "rating_number",
            "description": "Node type key that selects the meta shape."
          },
          "meta": {
            "$ref": "#/components/schemas/ModelNodeMetaRatingNumber"
          }
        },
        "required": [
          "public_id",
          "parent_node_id",
          "column_index",
          "sort_order",
          "is_hidden",
          "type",
          "meta"
        ],
        "title": "rating_number"
      },
      "ModelPlatformCanonicalBlueprintNodeSlider": {
        "type": "object",
        "properties": {
          "public_id": {
            "type": "string",
            "minLength": 4,
            "maxLength": 4,
            "pattern": "^[A-Za-z0-9_-]+$",
            "description": "Public ID of the node (4 characters). Always present on read."
          },
          "parent_node_id": {
            "anyOf": [
              {
                "type": "string",
                "minLength": 4,
                "maxLength": 4,
                "pattern": "^[A-Za-z0-9_-]+$"
              },
              {
                "type": "null"
              }
            ],
            "description": "Public ID of the layout row or question this node sits in, or null at the page root. Set together with column_index."
          },
          "column_index": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 2
              },
              {
                "type": "null"
              }
            ],
            "description": "Zero-based column inside the parent, or null at the page root. Set together with parent_node_id."
          },
          "sort_order": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991,
            "description": "Position among siblings in the same parent and column. Array order is canonical: the server renumbers from 1."
          },
          "is_hidden": {
            "type": "boolean",
            "description": "Whether the node is hidden: kept in the draft and absent from the published form."
          },
          "type": {
            "type": "string",
            "const": "slider",
            "description": "Node type key that selects the meta shape."
          },
          "meta": {
            "$ref": "#/components/schemas/ModelNodeMetaSlider"
          }
        },
        "required": [
          "public_id",
          "parent_node_id",
          "column_index",
          "sort_order",
          "is_hidden",
          "type",
          "meta"
        ],
        "title": "slider"
      },
      "ModelPlatformCanonicalBlueprintNodeSwitch": {
        "type": "object",
        "properties": {
          "public_id": {
            "type": "string",
            "minLength": 4,
            "maxLength": 4,
            "pattern": "^[A-Za-z0-9_-]+$",
            "description": "Public ID of the node (4 characters). Always present on read."
          },
          "parent_node_id": {
            "anyOf": [
              {
                "type": "string",
                "minLength": 4,
                "maxLength": 4,
                "pattern": "^[A-Za-z0-9_-]+$"
              },
              {
                "type": "null"
              }
            ],
            "description": "Public ID of the layout row or question this node sits in, or null at the page root. Set together with column_index."
          },
          "column_index": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 2
              },
              {
                "type": "null"
              }
            ],
            "description": "Zero-based column inside the parent, or null at the page root. Set together with parent_node_id."
          },
          "sort_order": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991,
            "description": "Position among siblings in the same parent and column. Array order is canonical: the server renumbers from 1."
          },
          "is_hidden": {
            "type": "boolean",
            "description": "Whether the node is hidden: kept in the draft and absent from the published form."
          },
          "type": {
            "type": "string",
            "const": "switch",
            "description": "Node type key that selects the meta shape."
          },
          "meta": {
            "$ref": "#/components/schemas/ModelNodeMetaSwitch"
          }
        },
        "required": [
          "public_id",
          "parent_node_id",
          "column_index",
          "sort_order",
          "is_hidden",
          "type",
          "meta"
        ],
        "title": "switch"
      },
      "ModelPlatformCanonicalBlueprintNodeText": {
        "type": "object",
        "properties": {
          "public_id": {
            "type": "string",
            "minLength": 4,
            "maxLength": 4,
            "pattern": "^[A-Za-z0-9_-]+$",
            "description": "Public ID of the node (4 characters). Always present on read."
          },
          "parent_node_id": {
            "anyOf": [
              {
                "type": "string",
                "minLength": 4,
                "maxLength": 4,
                "pattern": "^[A-Za-z0-9_-]+$"
              },
              {
                "type": "null"
              }
            ],
            "description": "Public ID of the layout row or question this node sits in, or null at the page root. Set together with column_index."
          },
          "column_index": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 2
              },
              {
                "type": "null"
              }
            ],
            "description": "Zero-based column inside the parent, or null at the page root. Set together with parent_node_id."
          },
          "sort_order": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991,
            "description": "Position among siblings in the same parent and column. Array order is canonical: the server renumbers from 1."
          },
          "is_hidden": {
            "type": "boolean",
            "description": "Whether the node is hidden: kept in the draft and absent from the published form."
          },
          "type": {
            "type": "string",
            "const": "text",
            "description": "Node type key that selects the meta shape."
          },
          "meta": {
            "$ref": "#/components/schemas/ModelNodeMetaText"
          }
        },
        "required": [
          "public_id",
          "parent_node_id",
          "column_index",
          "sort_order",
          "is_hidden",
          "type",
          "meta"
        ],
        "title": "text"
      },
      "ModelPlatformCanonicalBlueprintNodeTextInputEmail": {
        "type": "object",
        "properties": {
          "public_id": {
            "type": "string",
            "minLength": 4,
            "maxLength": 4,
            "pattern": "^[A-Za-z0-9_-]+$",
            "description": "Public ID of the node (4 characters). Always present on read."
          },
          "parent_node_id": {
            "anyOf": [
              {
                "type": "string",
                "minLength": 4,
                "maxLength": 4,
                "pattern": "^[A-Za-z0-9_-]+$"
              },
              {
                "type": "null"
              }
            ],
            "description": "Public ID of the layout row or question this node sits in, or null at the page root. Set together with column_index."
          },
          "column_index": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 2
              },
              {
                "type": "null"
              }
            ],
            "description": "Zero-based column inside the parent, or null at the page root. Set together with parent_node_id."
          },
          "sort_order": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991,
            "description": "Position among siblings in the same parent and column. Array order is canonical: the server renumbers from 1."
          },
          "is_hidden": {
            "type": "boolean",
            "description": "Whether the node is hidden: kept in the draft and absent from the published form."
          },
          "type": {
            "type": "string",
            "const": "text_input_email",
            "description": "Node type key that selects the meta shape."
          },
          "meta": {
            "$ref": "#/components/schemas/ModelNodeMetaTextInputEmail"
          }
        },
        "required": [
          "public_id",
          "parent_node_id",
          "column_index",
          "sort_order",
          "is_hidden",
          "type",
          "meta"
        ],
        "title": "text_input_email"
      },
      "ModelPlatformCanonicalBlueprintNodeTextInputLink": {
        "type": "object",
        "properties": {
          "public_id": {
            "type": "string",
            "minLength": 4,
            "maxLength": 4,
            "pattern": "^[A-Za-z0-9_-]+$",
            "description": "Public ID of the node (4 characters). Always present on read."
          },
          "parent_node_id": {
            "anyOf": [
              {
                "type": "string",
                "minLength": 4,
                "maxLength": 4,
                "pattern": "^[A-Za-z0-9_-]+$"
              },
              {
                "type": "null"
              }
            ],
            "description": "Public ID of the layout row or question this node sits in, or null at the page root. Set together with column_index."
          },
          "column_index": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 2
              },
              {
                "type": "null"
              }
            ],
            "description": "Zero-based column inside the parent, or null at the page root. Set together with parent_node_id."
          },
          "sort_order": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991,
            "description": "Position among siblings in the same parent and column. Array order is canonical: the server renumbers from 1."
          },
          "is_hidden": {
            "type": "boolean",
            "description": "Whether the node is hidden: kept in the draft and absent from the published form."
          },
          "type": {
            "type": "string",
            "const": "text_input_link",
            "description": "Node type key that selects the meta shape."
          },
          "meta": {
            "$ref": "#/components/schemas/ModelNodeMetaTextInputLink"
          }
        },
        "required": [
          "public_id",
          "parent_node_id",
          "column_index",
          "sort_order",
          "is_hidden",
          "type",
          "meta"
        ],
        "title": "text_input_link"
      },
      "ModelPlatformCanonicalBlueprintNodeTextInputLong": {
        "type": "object",
        "properties": {
          "public_id": {
            "type": "string",
            "minLength": 4,
            "maxLength": 4,
            "pattern": "^[A-Za-z0-9_-]+$",
            "description": "Public ID of the node (4 characters). Always present on read."
          },
          "parent_node_id": {
            "anyOf": [
              {
                "type": "string",
                "minLength": 4,
                "maxLength": 4,
                "pattern": "^[A-Za-z0-9_-]+$"
              },
              {
                "type": "null"
              }
            ],
            "description": "Public ID of the layout row or question this node sits in, or null at the page root. Set together with column_index."
          },
          "column_index": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 2
              },
              {
                "type": "null"
              }
            ],
            "description": "Zero-based column inside the parent, or null at the page root. Set together with parent_node_id."
          },
          "sort_order": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991,
            "description": "Position among siblings in the same parent and column. Array order is canonical: the server renumbers from 1."
          },
          "is_hidden": {
            "type": "boolean",
            "description": "Whether the node is hidden: kept in the draft and absent from the published form."
          },
          "type": {
            "type": "string",
            "const": "text_input_long",
            "description": "Node type key that selects the meta shape."
          },
          "meta": {
            "$ref": "#/components/schemas/ModelNodeMetaTextInputLong"
          }
        },
        "required": [
          "public_id",
          "parent_node_id",
          "column_index",
          "sort_order",
          "is_hidden",
          "type",
          "meta"
        ],
        "title": "text_input_long"
      },
      "ModelPlatformCanonicalBlueprintNodeTextInputShort": {
        "type": "object",
        "properties": {
          "public_id": {
            "type": "string",
            "minLength": 4,
            "maxLength": 4,
            "pattern": "^[A-Za-z0-9_-]+$",
            "description": "Public ID of the node (4 characters). Always present on read."
          },
          "parent_node_id": {
            "anyOf": [
              {
                "type": "string",
                "minLength": 4,
                "maxLength": 4,
                "pattern": "^[A-Za-z0-9_-]+$"
              },
              {
                "type": "null"
              }
            ],
            "description": "Public ID of the layout row or question this node sits in, or null at the page root. Set together with column_index."
          },
          "column_index": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 2
              },
              {
                "type": "null"
              }
            ],
            "description": "Zero-based column inside the parent, or null at the page root. Set together with parent_node_id."
          },
          "sort_order": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991,
            "description": "Position among siblings in the same parent and column. Array order is canonical: the server renumbers from 1."
          },
          "is_hidden": {
            "type": "boolean",
            "description": "Whether the node is hidden: kept in the draft and absent from the published form."
          },
          "type": {
            "type": "string",
            "const": "text_input_short",
            "description": "Node type key that selects the meta shape."
          },
          "meta": {
            "$ref": "#/components/schemas/ModelNodeMetaTextInputShort"
          }
        },
        "required": [
          "public_id",
          "parent_node_id",
          "column_index",
          "sort_order",
          "is_hidden",
          "type",
          "meta"
        ],
        "title": "text_input_short"
      },
      "ModelPlatformCanonicalBlueprintNodeThankYou": {
        "type": "object",
        "properties": {
          "public_id": {
            "type": "string",
            "minLength": 4,
            "maxLength": 4,
            "pattern": "^[A-Za-z0-9_-]+$",
            "description": "Public ID of the node (4 characters). Always present on read."
          },
          "parent_node_id": {
            "anyOf": [
              {
                "type": "string",
                "minLength": 4,
                "maxLength": 4,
                "pattern": "^[A-Za-z0-9_-]+$"
              },
              {
                "type": "null"
              }
            ],
            "description": "Public ID of the layout row or question this node sits in, or null at the page root. Set together with column_index."
          },
          "column_index": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 2
              },
              {
                "type": "null"
              }
            ],
            "description": "Zero-based column inside the parent, or null at the page root. Set together with parent_node_id."
          },
          "sort_order": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991,
            "description": "Position among siblings in the same parent and column. Array order is canonical: the server renumbers from 1."
          },
          "is_hidden": {
            "type": "boolean",
            "description": "Whether the node is hidden: kept in the draft and absent from the published form."
          },
          "type": {
            "type": "string",
            "const": "thank_you",
            "description": "Node type key that selects the meta shape."
          },
          "meta": {
            "$ref": "#/components/schemas/ModelNodeMetaThankYou"
          }
        },
        "required": [
          "public_id",
          "parent_node_id",
          "column_index",
          "sort_order",
          "is_hidden",
          "type",
          "meta"
        ],
        "title": "thank_you"
      },
      "ModelPlatformCanonicalBlueprintNodeTimePicker": {
        "type": "object",
        "properties": {
          "public_id": {
            "type": "string",
            "minLength": 4,
            "maxLength": 4,
            "pattern": "^[A-Za-z0-9_-]+$",
            "description": "Public ID of the node (4 characters). Always present on read."
          },
          "parent_node_id": {
            "anyOf": [
              {
                "type": "string",
                "minLength": 4,
                "maxLength": 4,
                "pattern": "^[A-Za-z0-9_-]+$"
              },
              {
                "type": "null"
              }
            ],
            "description": "Public ID of the layout row or question this node sits in, or null at the page root. Set together with column_index."
          },
          "column_index": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 2
              },
              {
                "type": "null"
              }
            ],
            "description": "Zero-based column inside the parent, or null at the page root. Set together with parent_node_id."
          },
          "sort_order": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991,
            "description": "Position among siblings in the same parent and column. Array order is canonical: the server renumbers from 1."
          },
          "is_hidden": {
            "type": "boolean",
            "description": "Whether the node is hidden: kept in the draft and absent from the published form."
          },
          "type": {
            "type": "string",
            "const": "time_picker",
            "description": "Node type key that selects the meta shape."
          },
          "meta": {
            "$ref": "#/components/schemas/ModelNodeMetaTimePicker"
          }
        },
        "required": [
          "public_id",
          "parent_node_id",
          "column_index",
          "sort_order",
          "is_hidden",
          "type",
          "meta"
        ],
        "title": "time_picker"
      },
      "ModelPlatformCanonicalBlueprintNodeYesNo": {
        "type": "object",
        "properties": {
          "public_id": {
            "type": "string",
            "minLength": 4,
            "maxLength": 4,
            "pattern": "^[A-Za-z0-9_-]+$",
            "description": "Public ID of the node (4 characters). Always present on read."
          },
          "parent_node_id": {
            "anyOf": [
              {
                "type": "string",
                "minLength": 4,
                "maxLength": 4,
                "pattern": "^[A-Za-z0-9_-]+$"
              },
              {
                "type": "null"
              }
            ],
            "description": "Public ID of the layout row or question this node sits in, or null at the page root. Set together with column_index."
          },
          "column_index": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 2
              },
              {
                "type": "null"
              }
            ],
            "description": "Zero-based column inside the parent, or null at the page root. Set together with parent_node_id."
          },
          "sort_order": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991,
            "description": "Position among siblings in the same parent and column. Array order is canonical: the server renumbers from 1."
          },
          "is_hidden": {
            "type": "boolean",
            "description": "Whether the node is hidden: kept in the draft and absent from the published form."
          },
          "type": {
            "type": "string",
            "const": "yes_no",
            "description": "Node type key that selects the meta shape."
          },
          "meta": {
            "$ref": "#/components/schemas/ModelNodeMetaYesNo"
          }
        },
        "required": [
          "public_id",
          "parent_node_id",
          "column_index",
          "sort_order",
          "is_hidden",
          "type",
          "meta"
        ],
        "title": "yes_no"
      },
      "ModelPlatformCanonicalBlueprintPage": {
        "type": "object",
        "properties": {
          "public_id": {
            "type": "string",
            "minLength": 4,
            "maxLength": 4,
            "pattern": "^[A-Za-z0-9_-]+$",
            "description": "Public ID of the page (4 characters). Always present on read."
          },
          "name": {
            "type": "string",
            "description": "Page name shown in the editor and used by the Form Title block when use_page_name is true."
          },
          "type": {
            "description": "Page kind: intro, normal, or final. An intro page comes first. Final pages are endings and come last; the first is the Default ending, the others are reached by jump rules.",
            "$ref": "#/components/schemas/ModelPageType"
          },
          "is_hidden": {
            "type": "boolean",
            "description": "Whether the page is hidden: kept in the draft, skipped by publish validation, and absent from the published form."
          },
          "is_entrypoint": {
            "type": "boolean",
            "description": "Whether respondents start on this page. Always the first page: true on any other page is rejected on write."
          },
          "is_auto_jump_next_page": {
            "type": "boolean",
            "description": "Whether answering the page's single eligible question advances to the next page automatically. Derived by the server from the page's blocks; ignored on write.",
            "readOnly": true
          },
          "nodes": {
            "maxItems": 101,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ModelPlatformCanonicalBlueprintNode"
            },
            "description": "Blocks on the page in display order. Layout children reference their row through parent_node_id."
          }
        },
        "required": [
          "public_id",
          "name",
          "type",
          "is_hidden",
          "is_entrypoint",
          "is_auto_jump_next_page",
          "nodes"
        ]
      },
      "ModelPlatformCanonicalBlueprintProperties": {
        "type": "object",
        "properties": {
          "show_branding": {
            "description": "Whether the fomr branding is shown. Forced on for Free organizations; Pro organizations can hide it, and a form created on Pro without this key hides it.",
            "x-fomr-plan": "pro",
            "x-fomr-plan-feature": "hide_branding",
            "$ref": "#/components/schemas/ModelNullableBooleanAsInt"
          },
          "auto_jump_next_page": {
            "description": "Default for automatic page advancing on pages with a single eligible question.",
            "$ref": "#/components/schemas/ModelNullableBooleanAsInt"
          },
          "allow_back_navigation": {
            "description": "Whether respondents may go back to earlier pages. When off, Back buttons are hidden on every page. Applies to the live form without republishing.",
            "$ref": "#/components/schemas/ModelNullableBooleanAsInt"
          },
          "meta_title": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 255
              },
              {
                "type": "null"
              }
            ],
            "description": "Title used in link previews and search results.",
            "x-fomr-plan": "pro",
            "x-fomr-plan-feature": "meta_tags"
          },
          "meta_description": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 500
              },
              {
                "type": "null"
              }
            ],
            "description": "Description used in link previews and search results.",
            "x-fomr-plan": "pro",
            "x-fomr-plan-feature": "meta_tags"
          },
          "meta_index": {
            "description": "Whether search engines may index the form.",
            "x-fomr-plan": "pro",
            "x-fomr-plan-feature": "meta_tags",
            "$ref": "#/components/schemas/ModelNullableBooleanAsInt"
          },
          "meta_favicon_url": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 1000,
                "format": "uri"
              },
              {
                "type": "null"
              }
            ],
            "description": "https URL of the favicon shown in the browser tab.",
            "x-fomr-plan": "pro",
            "x-fomr-plan-feature": "meta_tags"
          },
          "meta_ogimage_url": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 1000,
                "format": "uri"
              },
              {
                "type": "null"
              }
            ],
            "description": "https URL of the image used in link previews.",
            "x-fomr-plan": "pro",
            "x-fomr-plan-feature": "meta_tags"
          },
          "partial_response_capture_enabled": {
            "description": "Whether partial responses are captured before the form is submitted.",
            "x-fomr-plan": "pro",
            "x-fomr-plan-feature": "partial_response_access",
            "$ref": "#/components/schemas/ModelNullableBooleanAsInt"
          }
        },
        "required": [
          "show_branding",
          "auto_jump_next_page",
          "allow_back_navigation",
          "meta_title",
          "meta_description",
          "meta_index",
          "meta_favicon_url",
          "meta_ogimage_url",
          "partial_response_capture_enabled"
        ]
      },
      "ModelPlatformCanonicalBlueprintSettings": {
        "type": "object",
        "properties": {
          "email_notifications_enabled_owner": {
            "description": "Whether the form owner receives an email for each submission.",
            "$ref": "#/components/schemas/ModelNullableBooleanAsInt"
          },
          "email_notifications_enabled_respondent": {
            "description": "Whether respondents receive a confirmation email.",
            "x-fomr-plan": "pro",
            "x-fomr-plan-feature": "respondent_email_notifications",
            "$ref": "#/components/schemas/ModelNullableBooleanAsInt"
          },
          "email_notifications_recipients_owner": {
            "maxItems": 10,
            "type": "array",
            "items": {
              "type": "string",
              "maxLength": 320,
              "format": "email",
              "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
            },
            "description": "Email addresses of the organization members who receive the owner email, at most ten. Each must belong to an active member of the organization. Turning owner emails on while the list is empty adds the token owner, as the app does; an empty list sends no owner email."
          },
          "email_notifications_recipient_respondent": {
            "anyOf": [
              {
                "type": "string",
                "minLength": 4,
                "maxLength": 4,
                "pattern": "^[A-Za-z0-9_-]+$"
              },
              {
                "type": "null"
              }
            ],
            "description": "Public ID of the Email block (text_input_email) whose answer receives the respondent confirmation, or null. Respondent emails are not sent until it names an Email block in the form.",
            "x-fomr-plan": "pro",
            "x-fomr-plan-feature": "respondent_email_notifications"
          }
        },
        "required": [
          "email_notifications_enabled_owner",
          "email_notifications_enabled_respondent",
          "email_notifications_recipients_owner",
          "email_notifications_recipient_respondent"
        ]
      },
      "ModelPlatformCanonicalBlueprintStyles": {
        "type": "object",
        "properties": {
          "theme_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "ID of the applied theme. Resolve it with getTheme or listThemes."
          },
          "theme_name": {
            "description": "Name of the applied theme. Read-only.",
            "readOnly": true,
            "type": "string"
          },
          "override_properties": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelPlatformCanonicalBlueprintThemeOverride"
              },
              {
                "type": "null"
              }
            ],
            "description": "Per-form overrides of the theme's properties, or null. Read-only: edited in the app.",
            "readOnly": true
          }
        },
        "required": [
          "theme_id",
          "override_properties"
        ]
      },
      "ModelPlatformCanonicalBlueprintThemeOverride": {
        "type": "object",
        "properties": {
          "font": {
            "description": "Font family name.",
            "type": "string"
          },
          "background_color": {
            "description": "Page background color as a hex value.",
            "anyOf": [
              {
                "type": "string",
                "pattern": "^#([0-9A-Fa-f]{3}|[0-9A-Fa-f]{6})$"
              },
              {
                "type": "null"
              }
            ]
          },
          "background_url": {
            "description": "Background image URL.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelThemeImageUrl"
              },
              {
                "type": "null"
              }
            ]
          },
          "text_color": {
            "description": "Main text color as a hex value.",
            "anyOf": [
              {
                "type": "string",
                "pattern": "^#([0-9A-Fa-f]{3}|[0-9A-Fa-f]{6})$"
              },
              {
                "type": "null"
              }
            ]
          },
          "secondary_text_color": {
            "description": "Secondary text color as a hex value.",
            "anyOf": [
              {
                "type": "string",
                "pattern": "^#([0-9A-Fa-f]{3}|[0-9A-Fa-f]{6})$"
              },
              {
                "type": "null"
              }
            ]
          },
          "primary_color": {
            "description": "Primary color palette as a JSON-encoded array of hex values.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "option_colors": {
            "description": "Option color palette as a JSON-encoded array of hex values.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "primary_text_color": {
            "description": "Text color used on primary surfaces as a hex value.",
            "anyOf": [
              {
                "type": "string",
                "pattern": "^#([0-9A-Fa-f]{3}|[0-9A-Fa-f]{6})$"
              },
              {
                "type": "null"
              }
            ]
          },
          "border_color": {
            "description": "Border color as a hex value.",
            "anyOf": [
              {
                "type": "string",
                "pattern": "^#([0-9A-Fa-f]{3}|[0-9A-Fa-f]{6})$"
              },
              {
                "type": "null"
              }
            ]
          },
          "shadow_color": {
            "description": "Shadow color as a hex value.",
            "anyOf": [
              {
                "type": "string",
                "pattern": "^#([0-9A-Fa-f]{3}|[0-9A-Fa-f]{6})$"
              },
              {
                "type": "null"
              }
            ]
          },
          "dimmed_color": {
            "description": "Dimmed text color as a hex value.",
            "anyOf": [
              {
                "type": "string",
                "pattern": "^#([0-9A-Fa-f]{3}|[0-9A-Fa-f]{6})$"
              },
              {
                "type": "null"
              }
            ]
          },
          "error_color": {
            "description": "Error color as a hex value.",
            "anyOf": [
              {
                "type": "string",
                "pattern": "^#([0-9A-Fa-f]{3}|[0-9A-Fa-f]{6})$"
              },
              {
                "type": "null"
              }
            ]
          },
          "input_background_color": {
            "description": "Background color of input fields as a hex value.",
            "anyOf": [
              {
                "type": "string",
                "pattern": "^#([0-9A-Fa-f]{3}|[0-9A-Fa-f]{6})$"
              },
              {
                "type": "null"
              }
            ]
          },
          "input_text_color": {
            "description": "Text color inside input fields as a hex value.",
            "anyOf": [
              {
                "type": "string",
                "pattern": "^#([0-9A-Fa-f]{3}|[0-9A-Fa-f]{6})$"
              },
              {
                "type": "null"
              }
            ]
          },
          "form_width": {
            "description": "Form width: xs, sm, md, lg, or xl.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelStyleSize"
              },
              {
                "type": "null"
              }
            ]
          },
          "form_size": {
            "description": "Form text size: xs, sm, md, lg, or xl.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelStyleSize"
              },
              {
                "type": "null"
              }
            ]
          },
          "form_spacing": {
            "description": "Spacing between blocks: xs, sm, md, lg, or xl.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelStyleSize"
              },
              {
                "type": "null"
              }
            ]
          },
          "form_align_x": {
            "description": "Horizontal alignment of the form: left, center, or right.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelStyleAlignX"
              },
              {
                "type": "null"
              }
            ]
          },
          "form_align_y": {
            "description": "Vertical alignment of the form: top or center.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelStyleAlignY"
              },
              {
                "type": "null"
              }
            ]
          },
          "is_form_background_color": {
            "description": "Whether the form card uses a solid background color.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelNullableBooleanAsInt"
              },
              {
                "type": "null"
              }
            ]
          },
          "is_form_background_blur": {
            "description": "Whether the form card background is blurred.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelNullableBooleanAsInt"
              },
              {
                "type": "null"
              }
            ]
          },
          "border_radius": {
            "description": "Corner rounding: none, small, or full.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelStyleBorderRadius"
              },
              {
                "type": "null"
              }
            ]
          },
          "border_shadow": {
            "description": "Card shadow: none, small, or large.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelStyleBorderShadow"
              },
              {
                "type": "null"
              }
            ]
          },
          "logo_url": {
            "description": "Logo image URL.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelThemeImageUrl"
              },
              {
                "type": "null"
              }
            ]
          },
          "logo_align_x": {
            "description": "Horizontal alignment of the logo: left, center, or right.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelStyleLogoAlignX"
              },
              {
                "type": "null"
              }
            ]
          },
          "is_logo_hidden": {
            "description": "Whether the logo is hidden.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelNullableBooleanAsInt"
              },
              {
                "type": "null"
              }
            ]
          },
          "logo_width": {
            "description": "Logo width in pixels; null keeps the natural size.",
            "anyOf": [
              {
                "type": "integer",
                "minimum": 32,
                "maximum": 4096
              },
              {
                "type": "null"
              }
            ]
          },
          "is_logo_full_width": {
            "description": "Whether the logo stretches to the full form width.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelNullableBooleanAsInt"
              },
              {
                "type": "null"
              }
            ]
          },
          "page_actions_show_back_button": {
            "description": "Whether pages show a Back button by default.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelNullableBooleanAsInt"
              },
              {
                "type": "null"
              }
            ]
          },
          "page_actions_show_button_arrows": {
            "description": "Whether page buttons show directional arrows by default.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelNullableBooleanAsInt"
              },
              {
                "type": "null"
              }
            ]
          },
          "page_actions_alignment": {
            "description": "Default horizontal alignment of page buttons: left, center, right, or justify.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelNodeMetaAlignment"
              },
              {
                "type": "null"
              }
            ]
          },
          "select_options_layout": {
            "description": "Default option layout: list, bordered, or inline.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelNodeMetaSelectOptionsLayout"
              },
              {
                "type": "null"
              }
            ]
          },
          "font_id": {
            "description": "ID of the font.",
            "anyOf": [
              {
                "type": "string",
                "maxLength": 100
              },
              {
                "type": "null"
              }
            ]
          }
        }
      },
      "ModelPlatformCanonicalNodeMetaMedia": {
        "type": "object",
        "properties": {
          "media_url": {
            "description": "Public http or https URL of the video, audio, or post to embed.",
            "anyOf": [
              {
                "type": "string",
                "maxLength": 1000,
                "format": "uri"
              },
              {
                "type": "null"
              }
            ]
          },
          "media_embed": {
            "description": "Provider embed the server resolves from media_url (provider, kind, and IDs). Read-only: ignored on write and recomputed from media_url.",
            "readOnly": true,
            "anyOf": [
              {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "number"
                    },
                    {
                      "type": "boolean"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              {
                "type": "null"
              }
            ]
          },
          "media_caption": {
            "description": "Caption shown under the embed, as inline rich text HTML.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "media_alignment": {
            "description": "Horizontal alignment of the embed: left, center, or right.",
            "type": "string",
            "enum": [
              "left",
              "center",
              "right"
            ]
          },
          "media_width": {
            "description": "Rendered width in pixels when the embed is not full width.",
            "anyOf": [
              {
                "type": "integer",
                "exclusiveMinimum": 0,
                "maximum": 4096
              },
              {
                "type": "null"
              }
            ]
          },
          "media_full_width": {
            "description": "Whether the embed stretches to the full form width.",
            "default": true,
            "type": "boolean"
          }
        },
        "required": [
          "media_alignment",
          "media_full_width"
        ],
        "description": "Content and settings of a Media block."
      },
      "ModelPlatformCredential": {
        "oneOf": [
          {
            "$ref": "#/components/schemas/ModelPlatformCredentialPersonalAccessToken"
          }
        ],
        "description": "How a call was authenticated. New credential kinds are added over time."
      },
      "ModelPlatformCredentialPersonalAccessToken": {
        "type": "object",
        "properties": {
          "kind": {
            "type": "string",
            "const": "personal_access_token",
            "description": "Names the credential the caller authenticated with."
          },
          "token": {
            "description": "The Personal Access Token behind the call.",
            "$ref": "#/components/schemas/ModelPlatformCredentialToken"
          }
        },
        "required": [
          "kind",
          "token"
        ]
      },
      "ModelPlatformCredentialToken": {
        "type": "object",
        "properties": {
          "public_id": {
            "description": "The public ID of the token. The secret is never returned.",
            "$ref": "#/components/schemas/ModelPersonalAccessTokenPublicId"
          },
          "name": {
            "type": "string",
            "description": "The name the token was created with."
          },
          "expires_at": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelDate"
              },
              {
                "type": "null"
              }
            ],
            "description": "When the token stops working, or null when it never expires."
          }
        },
        "required": [
          "public_id",
          "name",
          "expires_at"
        ]
      },
      "ModelPlatformDomain": {
        "type": "object",
        "properties": {
          "host": {
            "description": "The domain host, such as forms.example.com. Pass it as domain to setFormDomain.",
            "$ref": "#/components/schemas/ModelDomainHost"
          },
          "status": {
            "description": "Verification state: verified, pending while DNS is checked, or failed.",
            "$ref": "#/components/schemas/ModelDomainStatus"
          },
          "is_active": {
            "type": "boolean",
            "description": "Whether the plan of the organization keeps the domain serving forms. Inactive domains cannot be bound to a form."
          },
          "is_fomr_subdomain": {
            "type": "boolean",
            "description": "Whether the domain is a fomr subdomain rather than a domain the organization owns."
          },
          "created_at": {
            "description": "When the domain was added.",
            "$ref": "#/components/schemas/ModelDate"
          }
        },
        "required": [
          "host",
          "status",
          "is_active",
          "is_fomr_subdomain",
          "created_at"
        ]
      },
      "ModelPlatformDomainList": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ModelPlatformDomain"
            },
            "description": "Every domain of the organization, ordered by host. Domains are added and verified in the app."
          }
        },
        "required": [
          "data"
        ]
      },
      "ModelPlatformDuplicateResponseRule": {
        "anyOf": [
          {
            "oneOf": [
              {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "ip_address",
                    "description": "The matching method: ip_address, submission_id, or component."
                  }
                },
                "required": [
                  "type"
                ],
                "description": "One completed response per respondent IP address."
              },
              {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "submission_id",
                    "description": "The matching method: ip_address, submission_id, or component."
                  }
                },
                "required": [
                  "type"
                ],
                "description": "One completed response per browser, using the completed response ID saved in it."
              },
              {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "component",
                    "description": "The matching method: ip_address, submission_id, or component."
                  },
                  "node_public_id": {
                    "type": "string",
                    "minLength": 4,
                    "maxLength": 4,
                    "pattern": "^[A-Za-z0-9_-]+$",
                    "description": "Public ID of the question whose answer must be unique: a visible short text, email, phone, link, or number block on a visible page."
                  }
                },
                "required": [
                  "type",
                  "node_public_id"
                ],
                "description": "Rejects a completed response that repeats an earlier answer to one question. Blank optional answers are not checked."
              }
            ]
          },
          {
            "type": "null"
          }
        ],
        "description": "How the form blocks a second completed response, or null to accept every response: by respondent IP address, by a completed response ID saved in the browser, or by the answer to one question."
      },
      "ModelPlatformDuplicateResponseRuleWriteInput": {
        "anyOf": [
          {
            "oneOf": [
              {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "ip_address",
                    "description": "The matching method: ip_address, submission_id, or component."
                  }
                },
                "required": [
                  "type"
                ],
                "additionalProperties": false,
                "description": "One completed response per respondent IP address."
              },
              {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "submission_id",
                    "description": "The matching method: ip_address, submission_id, or component."
                  }
                },
                "required": [
                  "type"
                ],
                "additionalProperties": false,
                "description": "One completed response per browser, using the completed response ID saved in it."
              },
              {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "component",
                    "description": "The matching method: ip_address, submission_id, or component."
                  },
                  "node_public_id": {
                    "type": "string",
                    "minLength": 4,
                    "maxLength": 4,
                    "pattern": "^[A-Za-z0-9_-]+$",
                    "description": "Public ID of the question whose answer must be unique: a visible short text, email, phone, link, or number block on a visible page."
                  }
                },
                "required": [
                  "type",
                  "node_public_id"
                ],
                "additionalProperties": false,
                "description": "Rejects a completed response that repeats an earlier answer to one question. Blank optional answers are not checked."
              }
            ]
          },
          {
            "type": "null"
          }
        ],
        "description": "How the form blocks a second completed response, or null to accept every response: by respondent IP address, by a completed response ID saved in the browser, or by the answer to one question."
      },
      "ModelPlatformError": {
        "type": "object",
        "properties": {
          "code": {
            "description": "The stable code to branch on.",
            "$ref": "#/components/schemas/ModelPlatformErrorCode"
          },
          "message": {
            "type": "string",
            "description": "A human-readable explanation. Not part of the contract; never branch on it."
          },
          "request_id": {
            "type": "string",
            "description": "The ID of the failed request, also sent as the X-Request-Id response header."
          }
        },
        "required": [
          "code",
          "message",
          "request_id"
        ]
      },
      "ModelPlatformErrorCode": {
        "type": "string",
        "enum": [
          "INVALID_INPUT",
          "UNAUTHORIZED",
          "PERSONAL_ACCESS_TOKEN_EXPIRED",
          "PERSONAL_ACCESS_TOKEN_REVOKED",
          "PLAN_LIMIT_REACHED",
          "PRO_FEATURE_REQUIRED",
          "FORBIDDEN",
          "FORM_PUBLISH_EMAIL_UNVERIFIED",
          "ORGANIZATION_MEMBER_BLOCKED",
          "PERSONAL_ACCESS_TOKEN_NOT_PERMITTED",
          "NOT_FOUND",
          "FORM_NOT_PUBLISHED",
          "NO_DRAFT_DURING_PUBLISH",
          "FORM_ARCHIVED",
          "FORM_CONVERSION_BLOCKED",
          "FORM_PUBLISH_REVISION_CONFLICT",
          "PAYLOAD_TOO_LARGE",
          "FORM_PUBLISH_VALIDATION_FAILED",
          "FORM_SAFETY_REJECTED",
          "TOO_MANY_REQUESTS",
          "API_COOLDOWN",
          "SERVER",
          "AI_SERVICE_UNAVAILABLE",
          "SERVICE_UNAVAILABLE"
        ],
        "description": "Stable Platform Error code. Clients fall back on the HTTP status for codes they do not know.",
        "x-fomr-http-status": {
          "INVALID_INPUT": 400,
          "UNAUTHORIZED": 401,
          "PERSONAL_ACCESS_TOKEN_EXPIRED": 401,
          "PERSONAL_ACCESS_TOKEN_REVOKED": 401,
          "PLAN_LIMIT_REACHED": 402,
          "PRO_FEATURE_REQUIRED": 402,
          "FORBIDDEN": 403,
          "FORM_PUBLISH_EMAIL_UNVERIFIED": 403,
          "ORGANIZATION_MEMBER_BLOCKED": 403,
          "PERSONAL_ACCESS_TOKEN_NOT_PERMITTED": 403,
          "NOT_FOUND": 404,
          "FORM_NOT_PUBLISHED": 404,
          "NO_DRAFT_DURING_PUBLISH": 409,
          "FORM_ARCHIVED": 409,
          "FORM_CONVERSION_BLOCKED": 409,
          "FORM_PUBLISH_REVISION_CONFLICT": 409,
          "PAYLOAD_TOO_LARGE": 413,
          "FORM_PUBLISH_VALIDATION_FAILED": 422,
          "FORM_SAFETY_REJECTED": 422,
          "TOO_MANY_REQUESTS": 429,
          "API_COOLDOWN": 429,
          "SERVER": 500,
          "AI_SERVICE_UNAVAILABLE": 503,
          "SERVICE_UNAVAILABLE": 503
        }
      },
      "ModelPlatformErrorIssue": {
        "type": "object",
        "properties": {
          "path": {
            "type": "array",
            "items": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "number"
                }
              ]
            },
            "description": "The path into the request, with property names and numeric array indexes."
          },
          "message": {
            "type": "string",
            "description": "What is wrong with the value at this path."
          },
          "code": {
            "type": "string",
            "description": "The stable code for the issue. Branch on it, and use it with params to write your own text."
          },
          "accepted_values": {
            "description": "Accepted values when a node type or enum value is rejected.",
            "type": "array",
            "items": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "number"
                },
                {
                  "type": "boolean"
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "params": {
            "description": "The values the message was built from, keyed by name, for clients that write their own text for each code.",
            "type": "object",
            "propertyNames": {
              "type": "string"
            },
            "additionalProperties": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "number"
                }
              ]
            }
          }
        },
        "required": [
          "path",
          "message",
          "code"
        ]
      },
      "ModelPlatformForbiddenError": {
        "type": "object",
        "properties": {
          "code": {
            "description": "The stable code to branch on.",
            "$ref": "#/components/schemas/ModelPlatformErrorCode"
          },
          "message": {
            "type": "string",
            "description": "A human-readable explanation. Not part of the contract; never branch on it."
          },
          "request_id": {
            "type": "string",
            "description": "The ID of the failed request, also sent as the X-Request-Id response header."
          },
          "required_permission": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "The permission the member would need, or null when the API cannot name a single one."
          }
        },
        "required": [
          "code",
          "message",
          "request_id",
          "required_permission"
        ]
      },
      "ModelPlatformForm": {
        "type": "object",
        "properties": {
          "public_id": {
            "description": "The public ID of the form. Use it in every other form call.",
            "$ref": "#/components/schemas/ModelFormPublicId"
          },
          "name": {
            "type": "string",
            "description": "Form name shown in the app."
          },
          "is_template": {
            "type": "boolean",
            "description": "Whether the resource is a Private Template rather than a form."
          },
          "status": {
            "$ref": "#/components/schemas/ModelPlatformFormStatus"
          },
          "has_unpublished_changes": {
            "type": "boolean",
            "description": "Whether publishing would change what respondents see. True for a form that has never been published."
          },
          "published_version": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": -9007199254740991,
                "maximum": 9007199254740991
              },
              {
                "type": "null"
              }
            ],
            "description": "The live version number, or null while nothing is published."
          },
          "published_at": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelDate"
              },
              {
                "type": "null"
              }
            ],
            "description": "When the live version was published, or null while nothing is published."
          },
          "source_template_public_id": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelFormPublicId"
              },
              {
                "type": "null"
              }
            ],
            "description": "The template this form started from, or null. Read-only: set once when the form is created.",
            "readOnly": true
          },
          "workspace_public_id": {
            "type": "string",
            "minLength": 4,
            "maxLength": 4,
            "description": "The workspace the form belongs to. Change it with the move operation.",
            "$ref": "#/components/schemas/ModelPlatformWorkspacePublicId"
          },
          "access": {
            "description": "Whether the form takes submissions.",
            "$ref": "#/components/schemas/ModelPlatformFormAccess"
          },
          "submissions": {
            "description": "How many submissions the form holds.",
            "$ref": "#/components/schemas/ModelPlatformFormSubmissionCounts"
          },
          "urls": {
            "description": "Where to open the form.",
            "$ref": "#/components/schemas/ModelPlatformFormUrls"
          },
          "domain": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelPlatformFormDomain"
              },
              {
                "type": "null"
              }
            ],
            "description": "The custom domain and slug the share link uses, or null for the fomr link. Set it with setFormDomain and clear it with deleteFormDomain."
          },
          "preview_image_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Thumbnail of the form, or null when none has been generated yet."
          },
          "created_at": {
            "description": "When the form was created.",
            "$ref": "#/components/schemas/ModelDate"
          },
          "updated_at": {
            "description": "When the form was last changed.",
            "$ref": "#/components/schemas/ModelDate"
          }
        },
        "required": [
          "public_id",
          "name",
          "is_template",
          "status",
          "has_unpublished_changes",
          "published_version",
          "published_at",
          "source_template_public_id",
          "workspace_public_id",
          "access",
          "submissions",
          "urls",
          "domain",
          "preview_image_url",
          "created_at",
          "updated_at"
        ]
      },
      "ModelPlatformFormAccess": {
        "type": "object",
        "properties": {
          "is_closed": {
            "type": "boolean",
            "description": "Whether the form was closed by hand."
          },
          "close_at": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelDate"
              },
              {
                "type": "null"
              }
            ],
            "description": "When the form stops accepting submissions, or null."
          },
          "open_at": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelDate"
              },
              {
                "type": "null"
              }
            ],
            "description": "When the form starts accepting submissions, or null."
          },
          "accepting_submissions": {
            "type": "boolean",
            "description": "Whether the form takes a submission right now. Derived from is_closed, the schedule, and whether a version is published."
          },
          "duplicate_response_rule": {
            "$ref": "#/components/schemas/ModelPlatformDuplicateResponseRule"
          }
        },
        "required": [
          "is_closed",
          "close_at",
          "open_at",
          "accepting_submissions",
          "duplicate_response_rule"
        ]
      },
      "ModelPlatformFormAccessUpdateInputInput": {
        "type": "object",
        "properties": {
          "is_closed": {
            "description": "Close the form by hand, or reopen it. Leave the field out to keep the current value.",
            "type": "boolean"
          },
          "close_at": {
            "description": "When the form should stop accepting submissions. Send null to clear the schedule, or leave the field out to keep it.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelDateInput"
              },
              {
                "type": "null"
              }
            ]
          },
          "open_at": {
            "description": "When the form should start accepting submissions. Send null to clear the schedule, or leave the field out to keep it.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelDateInput"
              },
              {
                "type": "null"
              }
            ]
          },
          "duplicate_response_rule": {
            "description": "How the form blocks a second completed response. Send null to accept every response, or leave the field out to keep the current rule. A component rule must name a visible short text, email, phone, link, or number block of the draft.",
            "$ref": "#/components/schemas/ModelPlatformDuplicateResponseRuleWriteInput"
          }
        },
        "additionalProperties": false
      },
      "ModelPlatformFormArchivedError": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string",
            "const": "FORM_ARCHIVED",
            "description": "The form is archived: it has no editable draft, so draft writes, publish, and conversion are refused."
          },
          "message": {
            "type": "string",
            "description": "A human-readable explanation. Not part of the contract; never branch on it."
          },
          "request_id": {
            "type": "string",
            "description": "The ID of the failed request, also sent as the X-Request-Id response header."
          }
        },
        "required": [
          "code",
          "message",
          "request_id"
        ]
      },
      "ModelPlatformFormBlueprintAccessInput": {
        "type": "object",
        "properties": {
          "is_closed": {
            "description": "Whether the form is closed to new submissions.",
            "$ref": "#/components/schemas/ModelNullableBooleanAsIntInput"
          },
          "close_at": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelDateInput"
              },
              {
                "type": "null"
              }
            ],
            "description": "When the form stops accepting submissions, or null."
          },
          "open_at": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelDateInput"
              },
              {
                "type": "null"
              }
            ],
            "description": "When the form starts accepting submissions, or null."
          },
          "duplicate_response_rule": {
            "$ref": "#/components/schemas/ModelPlatformDuplicateResponseRuleWriteInput"
          }
        },
        "additionalProperties": false
      },
      "ModelPlatformFormBlueprintInput": {
        "type": "object",
        "properties": {
          "public_id": {
            "description": "Public ID of the form (10 characters). Read-only: assigned by the server on create and ignored on write.",
            "readOnly": true,
            "$ref": "#/components/schemas/ModelFormPublicIdInput"
          },
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 100,
            "description": "Form name shown in the app."
          },
          "is_template": {
            "default": false,
            "description": "Whether the resource is a Private Template. Read-only on draft writes; honored when creating a form.",
            "readOnly": true,
            "type": "boolean"
          },
          "hidden_values": {
            "default": [],
            "description": "Hidden value declarations that respondents can supply through URL parameters.",
            "$ref": "#/components/schemas/ModelPlatformHiddenValueDeclarationsInput"
          },
          "logic_rules": {
            "description": "Conditional logic rules in evaluation order. Rules show, hide, require, or skip to pages, update Calculated values, and redirect (Pro) based on answers, Hidden values, and Calculated values. Rule, condition, and action IDs are 1-22 URL-safe characters chosen by the client and must stay stable. Left out on a draft write, the stored list is kept; send an empty list to remove every entry.",
            "$ref": "#/components/schemas/ModelPlatformLogicRulesInput"
          },
          "calculated_values": {
            "description": "Calculated values that logic rules update and that pipes and conditions read, in display order. Left out on a draft write, the stored list is kept; send an empty list to remove every entry.",
            "$ref": "#/components/schemas/ModelPlatformCalculatedValueDeclarationsInput"
          },
          "pages": {
            "minItems": 1,
            "maxItems": 100,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ModelPlatformFormBlueprintPageInput"
            },
            "description": "Pages in display order. Array order is canonical: the server renumbers page and node order on write."
          },
          "settings": {
            "description": "Notification settings of the form. A key left out on a draft write keeps its stored value; a key left out on create receives its default.",
            "$ref": "#/components/schemas/ModelPlatformFormBlueprintSettingsInput"
          },
          "properties": {
            "description": "Behavior and search-engine properties of the form. A key left out on a draft write keeps its stored value; a key left out on create receives its default.",
            "$ref": "#/components/schemas/ModelPlatformFormBlueprintPropertiesInput"
          },
          "access": {
            "description": "Whether the form accepts submissions. Read-only: owned by the close, reopen, and access operations.",
            "readOnly": true,
            "$ref": "#/components/schemas/ModelPlatformFormBlueprintAccessInput"
          },
          "styles": {
            "description": "Theme applied to the form. Only theme_id is writable: on create and on a draft write. Override properties are edited in the app.",
            "$ref": "#/components/schemas/ModelPlatformFormBlueprintStylesInput"
          }
        },
        "required": [
          "name",
          "pages"
        ],
        "additionalProperties": false
      },
      "ModelPlatformFormBlueprintNodeActionsInput": {
        "type": "object",
        "properties": {
          "public_id": {
            "description": "Public ID of the node (4 characters). Optional on write: a present ID keeps or matches the item, an absent ID creates a new item with a server-minted ID.",
            "type": "string",
            "minLength": 4,
            "maxLength": 4,
            "pattern": "^[A-Za-z0-9_-]+$"
          },
          "parent_node_id": {
            "description": "Public ID of the layout row or question this node sits in, or null at the page root. Set together with column_index.",
            "anyOf": [
              {
                "type": "string",
                "minLength": 4,
                "maxLength": 4,
                "pattern": "^[A-Za-z0-9_-]+$"
              },
              {
                "type": "null"
              }
            ]
          },
          "column_index": {
            "description": "Zero-based column inside the parent, or null at the page root. Set together with parent_node_id.",
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 2
              },
              {
                "type": "null"
              }
            ]
          },
          "sort_order": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991,
            "description": "Position among siblings in the same parent and column. Array order is canonical: the server renumbers from 1."
          },
          "is_hidden": {
            "default": false,
            "description": "Whether the node is hidden: kept in the draft and absent from the published form.",
            "type": "boolean"
          },
          "type": {
            "type": "string",
            "const": "actions",
            "description": "Node type key that selects the meta shape."
          },
          "meta": {
            "description": "Type-specific content and settings. Omitted keys receive the current product defaults, which every read echoes back.",
            "$ref": "#/components/schemas/ModelPlatformNodeMetaActionsInput"
          }
        },
        "required": [
          "sort_order",
          "type"
        ],
        "additionalProperties": false,
        "title": "actions"
      },
      "ModelPlatformFormBlueprintNodeCheckboxChoiceInput": {
        "type": "object",
        "properties": {
          "public_id": {
            "description": "Public ID of the node (4 characters). Optional on write: a present ID keeps or matches the item, an absent ID creates a new item with a server-minted ID.",
            "type": "string",
            "minLength": 4,
            "maxLength": 4,
            "pattern": "^[A-Za-z0-9_-]+$"
          },
          "parent_node_id": {
            "description": "Public ID of the layout row or question this node sits in, or null at the page root. Set together with column_index.",
            "anyOf": [
              {
                "type": "string",
                "minLength": 4,
                "maxLength": 4,
                "pattern": "^[A-Za-z0-9_-]+$"
              },
              {
                "type": "null"
              }
            ]
          },
          "column_index": {
            "description": "Zero-based column inside the parent, or null at the page root. Set together with parent_node_id.",
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 2
              },
              {
                "type": "null"
              }
            ]
          },
          "sort_order": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991,
            "description": "Position among siblings in the same parent and column. Array order is canonical: the server renumbers from 1."
          },
          "is_hidden": {
            "default": false,
            "description": "Whether the node is hidden: kept in the draft and absent from the published form.",
            "type": "boolean"
          },
          "type": {
            "type": "string",
            "const": "checkbox_choice",
            "description": "Node type key that selects the meta shape."
          },
          "meta": {
            "description": "Type-specific content and settings. Omitted keys receive the current product defaults, which every read echoes back.",
            "$ref": "#/components/schemas/ModelPlatformNodeMetaCheckboxChoiceInput"
          }
        },
        "required": [
          "sort_order",
          "type"
        ],
        "additionalProperties": false,
        "title": "checkbox_choice"
      },
      "ModelPlatformFormBlueprintNodeCheckboxInput": {
        "type": "object",
        "properties": {
          "public_id": {
            "description": "Public ID of the node (4 characters). Optional on write: a present ID keeps or matches the item, an absent ID creates a new item with a server-minted ID.",
            "type": "string",
            "minLength": 4,
            "maxLength": 4,
            "pattern": "^[A-Za-z0-9_-]+$"
          },
          "parent_node_id": {
            "description": "Public ID of the layout row or question this node sits in, or null at the page root. Set together with column_index.",
            "anyOf": [
              {
                "type": "string",
                "minLength": 4,
                "maxLength": 4,
                "pattern": "^[A-Za-z0-9_-]+$"
              },
              {
                "type": "null"
              }
            ]
          },
          "column_index": {
            "description": "Zero-based column inside the parent, or null at the page root. Set together with parent_node_id.",
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 2
              },
              {
                "type": "null"
              }
            ]
          },
          "sort_order": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991,
            "description": "Position among siblings in the same parent and column. Array order is canonical: the server renumbers from 1."
          },
          "is_hidden": {
            "default": false,
            "description": "Whether the node is hidden: kept in the draft and absent from the published form.",
            "type": "boolean"
          },
          "type": {
            "type": "string",
            "const": "checkbox",
            "description": "Node type key that selects the meta shape."
          },
          "meta": {
            "description": "Type-specific content and settings. Omitted keys receive the current product defaults, which every read echoes back.",
            "$ref": "#/components/schemas/ModelPlatformNodeMetaCheckboxInput"
          }
        },
        "required": [
          "sort_order",
          "type"
        ],
        "additionalProperties": false,
        "title": "checkbox"
      },
      "ModelPlatformFormBlueprintNodeDatePickerInput": {
        "type": "object",
        "properties": {
          "public_id": {
            "description": "Public ID of the node (4 characters). Optional on write: a present ID keeps or matches the item, an absent ID creates a new item with a server-minted ID.",
            "type": "string",
            "minLength": 4,
            "maxLength": 4,
            "pattern": "^[A-Za-z0-9_-]+$"
          },
          "parent_node_id": {
            "description": "Public ID of the layout row or question this node sits in, or null at the page root. Set together with column_index.",
            "anyOf": [
              {
                "type": "string",
                "minLength": 4,
                "maxLength": 4,
                "pattern": "^[A-Za-z0-9_-]+$"
              },
              {
                "type": "null"
              }
            ]
          },
          "column_index": {
            "description": "Zero-based column inside the parent, or null at the page root. Set together with parent_node_id.",
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 2
              },
              {
                "type": "null"
              }
            ]
          },
          "sort_order": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991,
            "description": "Position among siblings in the same parent and column. Array order is canonical: the server renumbers from 1."
          },
          "is_hidden": {
            "default": false,
            "description": "Whether the node is hidden: kept in the draft and absent from the published form.",
            "type": "boolean"
          },
          "type": {
            "type": "string",
            "const": "date_picker",
            "description": "Node type key that selects the meta shape."
          },
          "meta": {
            "description": "Type-specific content and settings. Omitted keys receive the current product defaults, which every read echoes back.",
            "$ref": "#/components/schemas/ModelPlatformNodeMetaDatePickerInput"
          }
        },
        "required": [
          "sort_order",
          "type"
        ],
        "additionalProperties": false,
        "title": "date_picker"
      },
      "ModelPlatformFormBlueprintNodeDateRangePickerInput": {
        "type": "object",
        "properties": {
          "public_id": {
            "description": "Public ID of the node (4 characters). Optional on write: a present ID keeps or matches the item, an absent ID creates a new item with a server-minted ID.",
            "type": "string",
            "minLength": 4,
            "maxLength": 4,
            "pattern": "^[A-Za-z0-9_-]+$"
          },
          "parent_node_id": {
            "description": "Public ID of the layout row or question this node sits in, or null at the page root. Set together with column_index.",
            "anyOf": [
              {
                "type": "string",
                "minLength": 4,
                "maxLength": 4,
                "pattern": "^[A-Za-z0-9_-]+$"
              },
              {
                "type": "null"
              }
            ]
          },
          "column_index": {
            "description": "Zero-based column inside the parent, or null at the page root. Set together with parent_node_id.",
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 2
              },
              {
                "type": "null"
              }
            ]
          },
          "sort_order": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991,
            "description": "Position among siblings in the same parent and column. Array order is canonical: the server renumbers from 1."
          },
          "is_hidden": {
            "default": false,
            "description": "Whether the node is hidden: kept in the draft and absent from the published form.",
            "type": "boolean"
          },
          "type": {
            "type": "string",
            "const": "date_range_picker",
            "description": "Node type key that selects the meta shape."
          },
          "meta": {
            "description": "Type-specific content and settings. Omitted keys receive the current product defaults, which every read echoes back.",
            "$ref": "#/components/schemas/ModelPlatformNodeMetaDateRangePickerInput"
          }
        },
        "required": [
          "sort_order",
          "type"
        ],
        "additionalProperties": false,
        "title": "date_range_picker"
      },
      "ModelPlatformFormBlueprintNodeDateTimePickerInput": {
        "type": "object",
        "properties": {
          "public_id": {
            "description": "Public ID of the node (4 characters). Optional on write: a present ID keeps or matches the item, an absent ID creates a new item with a server-minted ID.",
            "type": "string",
            "minLength": 4,
            "maxLength": 4,
            "pattern": "^[A-Za-z0-9_-]+$"
          },
          "parent_node_id": {
            "description": "Public ID of the layout row or question this node sits in, or null at the page root. Set together with column_index.",
            "anyOf": [
              {
                "type": "string",
                "minLength": 4,
                "maxLength": 4,
                "pattern": "^[A-Za-z0-9_-]+$"
              },
              {
                "type": "null"
              }
            ]
          },
          "column_index": {
            "description": "Zero-based column inside the parent, or null at the page root. Set together with parent_node_id.",
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 2
              },
              {
                "type": "null"
              }
            ]
          },
          "sort_order": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991,
            "description": "Position among siblings in the same parent and column. Array order is canonical: the server renumbers from 1."
          },
          "is_hidden": {
            "default": false,
            "description": "Whether the node is hidden: kept in the draft and absent from the published form.",
            "type": "boolean"
          },
          "type": {
            "type": "string",
            "const": "date_time_picker",
            "description": "Node type key that selects the meta shape."
          },
          "meta": {
            "description": "Type-specific content and settings. Omitted keys receive the current product defaults, which every read echoes back.",
            "$ref": "#/components/schemas/ModelPlatformNodeMetaDateTimePickerInput"
          }
        },
        "required": [
          "sort_order",
          "type"
        ],
        "additionalProperties": false,
        "title": "date_time_picker"
      },
      "ModelPlatformFormBlueprintNodeDividerInput": {
        "type": "object",
        "properties": {
          "public_id": {
            "description": "Public ID of the node (4 characters). Optional on write: a present ID keeps or matches the item, an absent ID creates a new item with a server-minted ID.",
            "type": "string",
            "minLength": 4,
            "maxLength": 4,
            "pattern": "^[A-Za-z0-9_-]+$"
          },
          "parent_node_id": {
            "description": "Public ID of the layout row or question this node sits in, or null at the page root. Set together with column_index.",
            "anyOf": [
              {
                "type": "string",
                "minLength": 4,
                "maxLength": 4,
                "pattern": "^[A-Za-z0-9_-]+$"
              },
              {
                "type": "null"
              }
            ]
          },
          "column_index": {
            "description": "Zero-based column inside the parent, or null at the page root. Set together with parent_node_id.",
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 2
              },
              {
                "type": "null"
              }
            ]
          },
          "sort_order": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991,
            "description": "Position among siblings in the same parent and column. Array order is canonical: the server renumbers from 1."
          },
          "is_hidden": {
            "default": false,
            "description": "Whether the node is hidden: kept in the draft and absent from the published form.",
            "type": "boolean"
          },
          "type": {
            "type": "string",
            "const": "divider",
            "description": "Node type key that selects the meta shape."
          },
          "meta": {
            "description": "Type-specific content and settings. Omitted keys receive the current product defaults, which every read echoes back.",
            "$ref": "#/components/schemas/ModelPlatformNodeMetaDividerInput"
          }
        },
        "required": [
          "sort_order",
          "type"
        ],
        "additionalProperties": false,
        "title": "divider"
      },
      "ModelPlatformFormBlueprintNodeDropdownInput": {
        "type": "object",
        "properties": {
          "public_id": {
            "description": "Public ID of the node (4 characters). Optional on write: a present ID keeps or matches the item, an absent ID creates a new item with a server-minted ID.",
            "type": "string",
            "minLength": 4,
            "maxLength": 4,
            "pattern": "^[A-Za-z0-9_-]+$"
          },
          "parent_node_id": {
            "description": "Public ID of the layout row or question this node sits in, or null at the page root. Set together with column_index.",
            "anyOf": [
              {
                "type": "string",
                "minLength": 4,
                "maxLength": 4,
                "pattern": "^[A-Za-z0-9_-]+$"
              },
              {
                "type": "null"
              }
            ]
          },
          "column_index": {
            "description": "Zero-based column inside the parent, or null at the page root. Set together with parent_node_id.",
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 2
              },
              {
                "type": "null"
              }
            ]
          },
          "sort_order": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991,
            "description": "Position among siblings in the same parent and column. Array order is canonical: the server renumbers from 1."
          },
          "is_hidden": {
            "default": false,
            "description": "Whether the node is hidden: kept in the draft and absent from the published form.",
            "type": "boolean"
          },
          "type": {
            "type": "string",
            "const": "dropdown",
            "description": "Node type key that selects the meta shape."
          },
          "meta": {
            "description": "Type-specific content and settings. Omitted keys receive the current product defaults, which every read echoes back.",
            "$ref": "#/components/schemas/ModelPlatformNodeMetaDropdownInput"
          }
        },
        "required": [
          "sort_order",
          "type"
        ],
        "additionalProperties": false,
        "title": "dropdown"
      },
      "ModelPlatformFormBlueprintNodeDropdownMultiselectInput": {
        "type": "object",
        "properties": {
          "public_id": {
            "description": "Public ID of the node (4 characters). Optional on write: a present ID keeps or matches the item, an absent ID creates a new item with a server-minted ID.",
            "type": "string",
            "minLength": 4,
            "maxLength": 4,
            "pattern": "^[A-Za-z0-9_-]+$"
          },
          "parent_node_id": {
            "description": "Public ID of the layout row or question this node sits in, or null at the page root. Set together with column_index.",
            "anyOf": [
              {
                "type": "string",
                "minLength": 4,
                "maxLength": 4,
                "pattern": "^[A-Za-z0-9_-]+$"
              },
              {
                "type": "null"
              }
            ]
          },
          "column_index": {
            "description": "Zero-based column inside the parent, or null at the page root. Set together with parent_node_id.",
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 2
              },
              {
                "type": "null"
              }
            ]
          },
          "sort_order": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991,
            "description": "Position among siblings in the same parent and column. Array order is canonical: the server renumbers from 1."
          },
          "is_hidden": {
            "default": false,
            "description": "Whether the node is hidden: kept in the draft and absent from the published form.",
            "type": "boolean"
          },
          "type": {
            "type": "string",
            "const": "dropdown_multiselect",
            "description": "Node type key that selects the meta shape."
          },
          "meta": {
            "description": "Type-specific content and settings. Omitted keys receive the current product defaults, which every read echoes back.",
            "$ref": "#/components/schemas/ModelPlatformNodeMetaDropdownMultiselectInput"
          }
        },
        "required": [
          "sort_order",
          "type"
        ],
        "additionalProperties": false,
        "title": "dropdown_multiselect"
      },
      "ModelPlatformFormBlueprintNodeFileUploadInput": {
        "type": "object",
        "properties": {
          "public_id": {
            "description": "Public ID of the node (4 characters). Optional on write: a present ID keeps or matches the item, an absent ID creates a new item with a server-minted ID.",
            "type": "string",
            "minLength": 4,
            "maxLength": 4,
            "pattern": "^[A-Za-z0-9_-]+$"
          },
          "parent_node_id": {
            "description": "Public ID of the layout row or question this node sits in, or null at the page root. Set together with column_index.",
            "anyOf": [
              {
                "type": "string",
                "minLength": 4,
                "maxLength": 4,
                "pattern": "^[A-Za-z0-9_-]+$"
              },
              {
                "type": "null"
              }
            ]
          },
          "column_index": {
            "description": "Zero-based column inside the parent, or null at the page root. Set together with parent_node_id.",
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 2
              },
              {
                "type": "null"
              }
            ]
          },
          "sort_order": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991,
            "description": "Position among siblings in the same parent and column. Array order is canonical: the server renumbers from 1."
          },
          "is_hidden": {
            "default": false,
            "description": "Whether the node is hidden: kept in the draft and absent from the published form.",
            "type": "boolean"
          },
          "type": {
            "type": "string",
            "const": "file_upload",
            "description": "Node type key that selects the meta shape."
          },
          "meta": {
            "description": "Type-specific content and settings. Omitted keys receive the current product defaults, which every read echoes back.",
            "$ref": "#/components/schemas/ModelPlatformNodeMetaFileUploadInput"
          }
        },
        "required": [
          "sort_order",
          "type"
        ],
        "additionalProperties": false,
        "title": "file_upload"
      },
      "ModelPlatformFormBlueprintNodeFormTitleInput": {
        "type": "object",
        "properties": {
          "public_id": {
            "description": "Public ID of the node (4 characters). Optional on write: a present ID keeps or matches the item, an absent ID creates a new item with a server-minted ID.",
            "type": "string",
            "minLength": 4,
            "maxLength": 4,
            "pattern": "^[A-Za-z0-9_-]+$"
          },
          "parent_node_id": {
            "description": "Public ID of the layout row or question this node sits in, or null at the page root. Set together with column_index.",
            "anyOf": [
              {
                "type": "string",
                "minLength": 4,
                "maxLength": 4,
                "pattern": "^[A-Za-z0-9_-]+$"
              },
              {
                "type": "null"
              }
            ]
          },
          "column_index": {
            "description": "Zero-based column inside the parent, or null at the page root. Set together with parent_node_id.",
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 2
              },
              {
                "type": "null"
              }
            ]
          },
          "sort_order": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991,
            "description": "Position among siblings in the same parent and column. Array order is canonical: the server renumbers from 1."
          },
          "is_hidden": {
            "default": false,
            "description": "Whether the node is hidden: kept in the draft and absent from the published form.",
            "type": "boolean"
          },
          "type": {
            "type": "string",
            "const": "form_title",
            "description": "Node type key that selects the meta shape."
          },
          "meta": {
            "description": "Type-specific content and settings. Omitted keys receive the current product defaults, which every read echoes back.",
            "$ref": "#/components/schemas/ModelPlatformNodeMetaFormTitleInput"
          }
        },
        "required": [
          "sort_order",
          "type"
        ],
        "additionalProperties": false,
        "title": "form_title"
      },
      "ModelPlatformFormBlueprintNodeImageInput": {
        "type": "object",
        "properties": {
          "public_id": {
            "description": "Public ID of the node (4 characters). Optional on write: a present ID keeps or matches the item, an absent ID creates a new item with a server-minted ID.",
            "type": "string",
            "minLength": 4,
            "maxLength": 4,
            "pattern": "^[A-Za-z0-9_-]+$"
          },
          "parent_node_id": {
            "description": "Public ID of the layout row or question this node sits in, or null at the page root. Set together with column_index.",
            "anyOf": [
              {
                "type": "string",
                "minLength": 4,
                "maxLength": 4,
                "pattern": "^[A-Za-z0-9_-]+$"
              },
              {
                "type": "null"
              }
            ]
          },
          "column_index": {
            "description": "Zero-based column inside the parent, or null at the page root. Set together with parent_node_id.",
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 2
              },
              {
                "type": "null"
              }
            ]
          },
          "sort_order": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991,
            "description": "Position among siblings in the same parent and column. Array order is canonical: the server renumbers from 1."
          },
          "is_hidden": {
            "default": false,
            "description": "Whether the node is hidden: kept in the draft and absent from the published form.",
            "type": "boolean"
          },
          "type": {
            "type": "string",
            "const": "image",
            "description": "Node type key that selects the meta shape."
          },
          "meta": {
            "description": "Type-specific content and settings. Omitted keys receive the current product defaults, which every read echoes back.",
            "$ref": "#/components/schemas/ModelPlatformNodeMetaImageInput"
          }
        },
        "required": [
          "sort_order",
          "type"
        ],
        "additionalProperties": false,
        "title": "image"
      },
      "ModelPlatformFormBlueprintNodeInput": {
        "oneOf": [
          {
            "$ref": "#/components/schemas/ModelPlatformFormBlueprintNodeActionsInput"
          },
          {
            "$ref": "#/components/schemas/ModelPlatformFormBlueprintNodeTextInputShortInput"
          },
          {
            "$ref": "#/components/schemas/ModelPlatformFormBlueprintNodeTextInputLongInput"
          },
          {
            "$ref": "#/components/schemas/ModelPlatformFormBlueprintNodeTextInputEmailInput"
          },
          {
            "$ref": "#/components/schemas/ModelPlatformFormBlueprintNodeTextInputLinkInput"
          },
          {
            "$ref": "#/components/schemas/ModelPlatformFormBlueprintNodeNumberInputInput"
          },
          {
            "$ref": "#/components/schemas/ModelPlatformFormBlueprintNodePhoneNumberInputInput"
          },
          {
            "$ref": "#/components/schemas/ModelPlatformFormBlueprintNodeFileUploadInput"
          },
          {
            "$ref": "#/components/schemas/ModelPlatformFormBlueprintNodeSwitchInput"
          },
          {
            "$ref": "#/components/schemas/ModelPlatformFormBlueprintNodeCheckboxInput"
          },
          {
            "$ref": "#/components/schemas/ModelPlatformFormBlueprintNodeDropdownInput"
          },
          {
            "$ref": "#/components/schemas/ModelPlatformFormBlueprintNodeDropdownMultiselectInput"
          },
          {
            "$ref": "#/components/schemas/ModelPlatformFormBlueprintNodeMultipleChoiceInput"
          },
          {
            "$ref": "#/components/schemas/ModelPlatformFormBlueprintNodeCheckboxChoiceInput"
          },
          {
            "$ref": "#/components/schemas/ModelPlatformFormBlueprintNodeYesNoInput"
          },
          {
            "$ref": "#/components/schemas/ModelPlatformFormBlueprintNodeRankingInput"
          },
          {
            "$ref": "#/components/schemas/ModelPlatformFormBlueprintNodeSliderInput"
          },
          {
            "$ref": "#/components/schemas/ModelPlatformFormBlueprintNodeRatingInput"
          },
          {
            "$ref": "#/components/schemas/ModelPlatformFormBlueprintNodeRatingNumberInput"
          },
          {
            "$ref": "#/components/schemas/ModelPlatformFormBlueprintNodeNpsInput"
          },
          {
            "$ref": "#/components/schemas/ModelPlatformFormBlueprintNodeDatePickerInput"
          },
          {
            "$ref": "#/components/schemas/ModelPlatformFormBlueprintNodeTimePickerInput"
          },
          {
            "$ref": "#/components/schemas/ModelPlatformFormBlueprintNodeDateTimePickerInput"
          },
          {
            "$ref": "#/components/schemas/ModelPlatformFormBlueprintNodeDateRangePickerInput"
          },
          {
            "$ref": "#/components/schemas/ModelPlatformFormBlueprintNodeTextInput"
          },
          {
            "$ref": "#/components/schemas/ModelPlatformFormBlueprintNodeImageInput"
          },
          {
            "$ref": "#/components/schemas/ModelPlatformFormBlueprintNodeMediaInput"
          },
          {
            "$ref": "#/components/schemas/ModelPlatformFormBlueprintNodeDividerInput"
          },
          {
            "$ref": "#/components/schemas/ModelPlatformFormBlueprintNodeLayoutRowInput"
          },
          {
            "$ref": "#/components/schemas/ModelPlatformFormBlueprintNodeMatrixInput"
          },
          {
            "$ref": "#/components/schemas/ModelPlatformFormBlueprintNodeFormTitleInput"
          },
          {
            "$ref": "#/components/schemas/ModelPlatformFormBlueprintNodeProgressBarInput"
          },
          {
            "$ref": "#/components/schemas/ModelPlatformFormBlueprintNodeThankYouInput"
          }
        ],
        "discriminator": {
          "propertyName": "type",
          "mapping": {
            "actions": "#/components/schemas/ModelPlatformFormBlueprintNodeActionsInput",
            "text_input_short": "#/components/schemas/ModelPlatformFormBlueprintNodeTextInputShortInput",
            "text_input_long": "#/components/schemas/ModelPlatformFormBlueprintNodeTextInputLongInput",
            "text_input_email": "#/components/schemas/ModelPlatformFormBlueprintNodeTextInputEmailInput",
            "text_input_link": "#/components/schemas/ModelPlatformFormBlueprintNodeTextInputLinkInput",
            "number_input": "#/components/schemas/ModelPlatformFormBlueprintNodeNumberInputInput",
            "phone_number_input": "#/components/schemas/ModelPlatformFormBlueprintNodePhoneNumberInputInput",
            "file_upload": "#/components/schemas/ModelPlatformFormBlueprintNodeFileUploadInput",
            "switch": "#/components/schemas/ModelPlatformFormBlueprintNodeSwitchInput",
            "checkbox": "#/components/schemas/ModelPlatformFormBlueprintNodeCheckboxInput",
            "dropdown": "#/components/schemas/ModelPlatformFormBlueprintNodeDropdownInput",
            "dropdown_multiselect": "#/components/schemas/ModelPlatformFormBlueprintNodeDropdownMultiselectInput",
            "multiple_choice": "#/components/schemas/ModelPlatformFormBlueprintNodeMultipleChoiceInput",
            "checkbox_choice": "#/components/schemas/ModelPlatformFormBlueprintNodeCheckboxChoiceInput",
            "yes_no": "#/components/schemas/ModelPlatformFormBlueprintNodeYesNoInput",
            "ranking": "#/components/schemas/ModelPlatformFormBlueprintNodeRankingInput",
            "slider": "#/components/schemas/ModelPlatformFormBlueprintNodeSliderInput",
            "rating": "#/components/schemas/ModelPlatformFormBlueprintNodeRatingInput",
            "rating_number": "#/components/schemas/ModelPlatformFormBlueprintNodeRatingNumberInput",
            "nps": "#/components/schemas/ModelPlatformFormBlueprintNodeNpsInput",
            "date_picker": "#/components/schemas/ModelPlatformFormBlueprintNodeDatePickerInput",
            "time_picker": "#/components/schemas/ModelPlatformFormBlueprintNodeTimePickerInput",
            "date_time_picker": "#/components/schemas/ModelPlatformFormBlueprintNodeDateTimePickerInput",
            "date_range_picker": "#/components/schemas/ModelPlatformFormBlueprintNodeDateRangePickerInput",
            "text": "#/components/schemas/ModelPlatformFormBlueprintNodeTextInput",
            "image": "#/components/schemas/ModelPlatformFormBlueprintNodeImageInput",
            "media": "#/components/schemas/ModelPlatformFormBlueprintNodeMediaInput",
            "divider": "#/components/schemas/ModelPlatformFormBlueprintNodeDividerInput",
            "layout_row": "#/components/schemas/ModelPlatformFormBlueprintNodeLayoutRowInput",
            "matrix": "#/components/schemas/ModelPlatformFormBlueprintNodeMatrixInput",
            "form_title": "#/components/schemas/ModelPlatformFormBlueprintNodeFormTitleInput",
            "progress_bar": "#/components/schemas/ModelPlatformFormBlueprintNodeProgressBarInput",
            "thank_you": "#/components/schemas/ModelPlatformFormBlueprintNodeThankYouInput"
          }
        }
      },
      "ModelPlatformFormBlueprintNodeLayoutRowInput": {
        "type": "object",
        "properties": {
          "public_id": {
            "description": "Public ID of the node (4 characters). Optional on write: a present ID keeps or matches the item, an absent ID creates a new item with a server-minted ID.",
            "type": "string",
            "minLength": 4,
            "maxLength": 4,
            "pattern": "^[A-Za-z0-9_-]+$"
          },
          "parent_node_id": {
            "description": "Public ID of the layout row or question this node sits in, or null at the page root. Set together with column_index.",
            "anyOf": [
              {
                "type": "string",
                "minLength": 4,
                "maxLength": 4,
                "pattern": "^[A-Za-z0-9_-]+$"
              },
              {
                "type": "null"
              }
            ]
          },
          "column_index": {
            "description": "Zero-based column inside the parent, or null at the page root. Set together with parent_node_id.",
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 2
              },
              {
                "type": "null"
              }
            ]
          },
          "sort_order": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991,
            "description": "Position among siblings in the same parent and column. Array order is canonical: the server renumbers from 1."
          },
          "is_hidden": {
            "default": false,
            "description": "Whether the node is hidden: kept in the draft and absent from the published form.",
            "type": "boolean"
          },
          "type": {
            "type": "string",
            "const": "layout_row",
            "description": "Node type key that selects the meta shape."
          },
          "meta": {
            "description": "Type-specific content and settings. Omitted keys receive the current product defaults, which every read echoes back.",
            "$ref": "#/components/schemas/ModelPlatformNodeMetaLayoutRowInput"
          }
        },
        "required": [
          "sort_order",
          "type"
        ],
        "additionalProperties": false,
        "title": "layout_row"
      },
      "ModelPlatformFormBlueprintNodeMatrixInput": {
        "type": "object",
        "properties": {
          "public_id": {
            "description": "Public ID of the node (4 characters). Optional on write: a present ID keeps or matches the item, an absent ID creates a new item with a server-minted ID.",
            "type": "string",
            "minLength": 4,
            "maxLength": 4,
            "pattern": "^[A-Za-z0-9_-]+$"
          },
          "parent_node_id": {
            "description": "Public ID of the layout row or question this node sits in, or null at the page root. Set together with column_index.",
            "anyOf": [
              {
                "type": "string",
                "minLength": 4,
                "maxLength": 4,
                "pattern": "^[A-Za-z0-9_-]+$"
              },
              {
                "type": "null"
              }
            ]
          },
          "column_index": {
            "description": "Zero-based column inside the parent, or null at the page root. Set together with parent_node_id.",
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 2
              },
              {
                "type": "null"
              }
            ]
          },
          "sort_order": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991,
            "description": "Position among siblings in the same parent and column. Array order is canonical: the server renumbers from 1."
          },
          "is_hidden": {
            "default": false,
            "description": "Whether the node is hidden: kept in the draft and absent from the published form.",
            "type": "boolean"
          },
          "type": {
            "type": "string",
            "const": "matrix",
            "description": "Node type key that selects the meta shape."
          },
          "meta": {
            "description": "Type-specific content and settings. Omitted keys receive the current product defaults, which every read echoes back.",
            "$ref": "#/components/schemas/ModelPlatformNodeMetaMatrixInput"
          }
        },
        "required": [
          "sort_order",
          "type"
        ],
        "additionalProperties": false,
        "title": "matrix"
      },
      "ModelPlatformFormBlueprintNodeMediaInput": {
        "type": "object",
        "properties": {
          "public_id": {
            "description": "Public ID of the node (4 characters). Optional on write: a present ID keeps or matches the item, an absent ID creates a new item with a server-minted ID.",
            "type": "string",
            "minLength": 4,
            "maxLength": 4,
            "pattern": "^[A-Za-z0-9_-]+$"
          },
          "parent_node_id": {
            "description": "Public ID of the layout row or question this node sits in, or null at the page root. Set together with column_index.",
            "anyOf": [
              {
                "type": "string",
                "minLength": 4,
                "maxLength": 4,
                "pattern": "^[A-Za-z0-9_-]+$"
              },
              {
                "type": "null"
              }
            ]
          },
          "column_index": {
            "description": "Zero-based column inside the parent, or null at the page root. Set together with parent_node_id.",
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 2
              },
              {
                "type": "null"
              }
            ]
          },
          "sort_order": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991,
            "description": "Position among siblings in the same parent and column. Array order is canonical: the server renumbers from 1."
          },
          "is_hidden": {
            "default": false,
            "description": "Whether the node is hidden: kept in the draft and absent from the published form.",
            "type": "boolean"
          },
          "type": {
            "type": "string",
            "const": "media",
            "description": "Node type key that selects the meta shape."
          },
          "meta": {
            "description": "Type-specific content and settings. Omitted keys receive the current product defaults, which every read echoes back.",
            "$ref": "#/components/schemas/ModelPlatformNodeMetaMediaInput"
          }
        },
        "required": [
          "sort_order",
          "type"
        ],
        "additionalProperties": false,
        "title": "media"
      },
      "ModelPlatformFormBlueprintNodeMultipleChoiceInput": {
        "type": "object",
        "properties": {
          "public_id": {
            "description": "Public ID of the node (4 characters). Optional on write: a present ID keeps or matches the item, an absent ID creates a new item with a server-minted ID.",
            "type": "string",
            "minLength": 4,
            "maxLength": 4,
            "pattern": "^[A-Za-z0-9_-]+$"
          },
          "parent_node_id": {
            "description": "Public ID of the layout row or question this node sits in, or null at the page root. Set together with column_index.",
            "anyOf": [
              {
                "type": "string",
                "minLength": 4,
                "maxLength": 4,
                "pattern": "^[A-Za-z0-9_-]+$"
              },
              {
                "type": "null"
              }
            ]
          },
          "column_index": {
            "description": "Zero-based column inside the parent, or null at the page root. Set together with parent_node_id.",
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 2
              },
              {
                "type": "null"
              }
            ]
          },
          "sort_order": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991,
            "description": "Position among siblings in the same parent and column. Array order is canonical: the server renumbers from 1."
          },
          "is_hidden": {
            "default": false,
            "description": "Whether the node is hidden: kept in the draft and absent from the published form.",
            "type": "boolean"
          },
          "type": {
            "type": "string",
            "const": "multiple_choice",
            "description": "Node type key that selects the meta shape."
          },
          "meta": {
            "description": "Type-specific content and settings. Omitted keys receive the current product defaults, which every read echoes back.",
            "$ref": "#/components/schemas/ModelPlatformNodeMetaMultipleChoiceInput"
          }
        },
        "required": [
          "sort_order",
          "type"
        ],
        "additionalProperties": false,
        "title": "multiple_choice"
      },
      "ModelPlatformFormBlueprintNodeNpsInput": {
        "type": "object",
        "properties": {
          "public_id": {
            "description": "Public ID of the node (4 characters). Optional on write: a present ID keeps or matches the item, an absent ID creates a new item with a server-minted ID.",
            "type": "string",
            "minLength": 4,
            "maxLength": 4,
            "pattern": "^[A-Za-z0-9_-]+$"
          },
          "parent_node_id": {
            "description": "Public ID of the layout row or question this node sits in, or null at the page root. Set together with column_index.",
            "anyOf": [
              {
                "type": "string",
                "minLength": 4,
                "maxLength": 4,
                "pattern": "^[A-Za-z0-9_-]+$"
              },
              {
                "type": "null"
              }
            ]
          },
          "column_index": {
            "description": "Zero-based column inside the parent, or null at the page root. Set together with parent_node_id.",
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 2
              },
              {
                "type": "null"
              }
            ]
          },
          "sort_order": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991,
            "description": "Position among siblings in the same parent and column. Array order is canonical: the server renumbers from 1."
          },
          "is_hidden": {
            "default": false,
            "description": "Whether the node is hidden: kept in the draft and absent from the published form.",
            "type": "boolean"
          },
          "type": {
            "type": "string",
            "const": "nps",
            "description": "Node type key that selects the meta shape."
          },
          "meta": {
            "description": "Type-specific content and settings. Omitted keys receive the current product defaults, which every read echoes back.",
            "$ref": "#/components/schemas/ModelPlatformNodeMetaNpsInput"
          }
        },
        "required": [
          "sort_order",
          "type"
        ],
        "additionalProperties": false,
        "title": "nps"
      },
      "ModelPlatformFormBlueprintNodeNumberInputInput": {
        "type": "object",
        "properties": {
          "public_id": {
            "description": "Public ID of the node (4 characters). Optional on write: a present ID keeps or matches the item, an absent ID creates a new item with a server-minted ID.",
            "type": "string",
            "minLength": 4,
            "maxLength": 4,
            "pattern": "^[A-Za-z0-9_-]+$"
          },
          "parent_node_id": {
            "description": "Public ID of the layout row or question this node sits in, or null at the page root. Set together with column_index.",
            "anyOf": [
              {
                "type": "string",
                "minLength": 4,
                "maxLength": 4,
                "pattern": "^[A-Za-z0-9_-]+$"
              },
              {
                "type": "null"
              }
            ]
          },
          "column_index": {
            "description": "Zero-based column inside the parent, or null at the page root. Set together with parent_node_id.",
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 2
              },
              {
                "type": "null"
              }
            ]
          },
          "sort_order": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991,
            "description": "Position among siblings in the same parent and column. Array order is canonical: the server renumbers from 1."
          },
          "is_hidden": {
            "default": false,
            "description": "Whether the node is hidden: kept in the draft and absent from the published form.",
            "type": "boolean"
          },
          "type": {
            "type": "string",
            "const": "number_input",
            "description": "Node type key that selects the meta shape."
          },
          "meta": {
            "description": "Type-specific content and settings. Omitted keys receive the current product defaults, which every read echoes back.",
            "$ref": "#/components/schemas/ModelPlatformNodeMetaNumberInputInput"
          }
        },
        "required": [
          "sort_order",
          "type"
        ],
        "additionalProperties": false,
        "title": "number_input"
      },
      "ModelPlatformFormBlueprintNodePhoneNumberInputInput": {
        "type": "object",
        "properties": {
          "public_id": {
            "description": "Public ID of the node (4 characters). Optional on write: a present ID keeps or matches the item, an absent ID creates a new item with a server-minted ID.",
            "type": "string",
            "minLength": 4,
            "maxLength": 4,
            "pattern": "^[A-Za-z0-9_-]+$"
          },
          "parent_node_id": {
            "description": "Public ID of the layout row or question this node sits in, or null at the page root. Set together with column_index.",
            "anyOf": [
              {
                "type": "string",
                "minLength": 4,
                "maxLength": 4,
                "pattern": "^[A-Za-z0-9_-]+$"
              },
              {
                "type": "null"
              }
            ]
          },
          "column_index": {
            "description": "Zero-based column inside the parent, or null at the page root. Set together with parent_node_id.",
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 2
              },
              {
                "type": "null"
              }
            ]
          },
          "sort_order": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991,
            "description": "Position among siblings in the same parent and column. Array order is canonical: the server renumbers from 1."
          },
          "is_hidden": {
            "default": false,
            "description": "Whether the node is hidden: kept in the draft and absent from the published form.",
            "type": "boolean"
          },
          "type": {
            "type": "string",
            "const": "phone_number_input",
            "description": "Node type key that selects the meta shape."
          },
          "meta": {
            "description": "Type-specific content and settings. Omitted keys receive the current product defaults, which every read echoes back.",
            "$ref": "#/components/schemas/ModelPlatformNodeMetaPhoneNumberInputInput"
          }
        },
        "required": [
          "sort_order",
          "type"
        ],
        "additionalProperties": false,
        "title": "phone_number_input"
      },
      "ModelPlatformFormBlueprintNodeProgressBarInput": {
        "type": "object",
        "properties": {
          "public_id": {
            "description": "Public ID of the node (4 characters). Optional on write: a present ID keeps or matches the item, an absent ID creates a new item with a server-minted ID.",
            "type": "string",
            "minLength": 4,
            "maxLength": 4,
            "pattern": "^[A-Za-z0-9_-]+$"
          },
          "parent_node_id": {
            "description": "Public ID of the layout row or question this node sits in, or null at the page root. Set together with column_index.",
            "anyOf": [
              {
                "type": "string",
                "minLength": 4,
                "maxLength": 4,
                "pattern": "^[A-Za-z0-9_-]+$"
              },
              {
                "type": "null"
              }
            ]
          },
          "column_index": {
            "description": "Zero-based column inside the parent, or null at the page root. Set together with parent_node_id.",
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 2
              },
              {
                "type": "null"
              }
            ]
          },
          "sort_order": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991,
            "description": "Position among siblings in the same parent and column. Array order is canonical: the server renumbers from 1."
          },
          "is_hidden": {
            "default": false,
            "description": "Whether the node is hidden: kept in the draft and absent from the published form.",
            "type": "boolean"
          },
          "type": {
            "type": "string",
            "const": "progress_bar",
            "description": "Node type key that selects the meta shape."
          },
          "meta": {
            "description": "Type-specific content and settings. Omitted keys receive the current product defaults, which every read echoes back.",
            "$ref": "#/components/schemas/ModelPlatformNodeMetaProgressBarInput"
          }
        },
        "required": [
          "sort_order",
          "type"
        ],
        "additionalProperties": false,
        "title": "progress_bar"
      },
      "ModelPlatformFormBlueprintNodeRankingInput": {
        "type": "object",
        "properties": {
          "public_id": {
            "description": "Public ID of the node (4 characters). Optional on write: a present ID keeps or matches the item, an absent ID creates a new item with a server-minted ID.",
            "type": "string",
            "minLength": 4,
            "maxLength": 4,
            "pattern": "^[A-Za-z0-9_-]+$"
          },
          "parent_node_id": {
            "description": "Public ID of the layout row or question this node sits in, or null at the page root. Set together with column_index.",
            "anyOf": [
              {
                "type": "string",
                "minLength": 4,
                "maxLength": 4,
                "pattern": "^[A-Za-z0-9_-]+$"
              },
              {
                "type": "null"
              }
            ]
          },
          "column_index": {
            "description": "Zero-based column inside the parent, or null at the page root. Set together with parent_node_id.",
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 2
              },
              {
                "type": "null"
              }
            ]
          },
          "sort_order": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991,
            "description": "Position among siblings in the same parent and column. Array order is canonical: the server renumbers from 1."
          },
          "is_hidden": {
            "default": false,
            "description": "Whether the node is hidden: kept in the draft and absent from the published form.",
            "type": "boolean"
          },
          "type": {
            "type": "string",
            "const": "ranking",
            "description": "Node type key that selects the meta shape."
          },
          "meta": {
            "description": "Type-specific content and settings. Omitted keys receive the current product defaults, which every read echoes back.",
            "$ref": "#/components/schemas/ModelPlatformNodeMetaRankingInput"
          }
        },
        "required": [
          "sort_order",
          "type"
        ],
        "additionalProperties": false,
        "title": "ranking"
      },
      "ModelPlatformFormBlueprintNodeRatingInput": {
        "type": "object",
        "properties": {
          "public_id": {
            "description": "Public ID of the node (4 characters). Optional on write: a present ID keeps or matches the item, an absent ID creates a new item with a server-minted ID.",
            "type": "string",
            "minLength": 4,
            "maxLength": 4,
            "pattern": "^[A-Za-z0-9_-]+$"
          },
          "parent_node_id": {
            "description": "Public ID of the layout row or question this node sits in, or null at the page root. Set together with column_index.",
            "anyOf": [
              {
                "type": "string",
                "minLength": 4,
                "maxLength": 4,
                "pattern": "^[A-Za-z0-9_-]+$"
              },
              {
                "type": "null"
              }
            ]
          },
          "column_index": {
            "description": "Zero-based column inside the parent, or null at the page root. Set together with parent_node_id.",
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 2
              },
              {
                "type": "null"
              }
            ]
          },
          "sort_order": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991,
            "description": "Position among siblings in the same parent and column. Array order is canonical: the server renumbers from 1."
          },
          "is_hidden": {
            "default": false,
            "description": "Whether the node is hidden: kept in the draft and absent from the published form.",
            "type": "boolean"
          },
          "type": {
            "type": "string",
            "const": "rating",
            "description": "Node type key that selects the meta shape."
          },
          "meta": {
            "description": "Type-specific content and settings. Omitted keys receive the current product defaults, which every read echoes back.",
            "$ref": "#/components/schemas/ModelPlatformNodeMetaRatingInput"
          }
        },
        "required": [
          "sort_order",
          "type"
        ],
        "additionalProperties": false,
        "title": "rating"
      },
      "ModelPlatformFormBlueprintNodeRatingNumberInput": {
        "type": "object",
        "properties": {
          "public_id": {
            "description": "Public ID of the node (4 characters). Optional on write: a present ID keeps or matches the item, an absent ID creates a new item with a server-minted ID.",
            "type": "string",
            "minLength": 4,
            "maxLength": 4,
            "pattern": "^[A-Za-z0-9_-]+$"
          },
          "parent_node_id": {
            "description": "Public ID of the layout row or question this node sits in, or null at the page root. Set together with column_index.",
            "anyOf": [
              {
                "type": "string",
                "minLength": 4,
                "maxLength": 4,
                "pattern": "^[A-Za-z0-9_-]+$"
              },
              {
                "type": "null"
              }
            ]
          },
          "column_index": {
            "description": "Zero-based column inside the parent, or null at the page root. Set together with parent_node_id.",
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 2
              },
              {
                "type": "null"
              }
            ]
          },
          "sort_order": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991,
            "description": "Position among siblings in the same parent and column. Array order is canonical: the server renumbers from 1."
          },
          "is_hidden": {
            "default": false,
            "description": "Whether the node is hidden: kept in the draft and absent from the published form.",
            "type": "boolean"
          },
          "type": {
            "type": "string",
            "const": "rating_number",
            "description": "Node type key that selects the meta shape."
          },
          "meta": {
            "description": "Type-specific content and settings. Omitted keys receive the current product defaults, which every read echoes back.",
            "$ref": "#/components/schemas/ModelPlatformNodeMetaRatingNumberInput"
          }
        },
        "required": [
          "sort_order",
          "type"
        ],
        "additionalProperties": false,
        "title": "rating_number"
      },
      "ModelPlatformFormBlueprintNodeSliderInput": {
        "type": "object",
        "properties": {
          "public_id": {
            "description": "Public ID of the node (4 characters). Optional on write: a present ID keeps or matches the item, an absent ID creates a new item with a server-minted ID.",
            "type": "string",
            "minLength": 4,
            "maxLength": 4,
            "pattern": "^[A-Za-z0-9_-]+$"
          },
          "parent_node_id": {
            "description": "Public ID of the layout row or question this node sits in, or null at the page root. Set together with column_index.",
            "anyOf": [
              {
                "type": "string",
                "minLength": 4,
                "maxLength": 4,
                "pattern": "^[A-Za-z0-9_-]+$"
              },
              {
                "type": "null"
              }
            ]
          },
          "column_index": {
            "description": "Zero-based column inside the parent, or null at the page root. Set together with parent_node_id.",
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 2
              },
              {
                "type": "null"
              }
            ]
          },
          "sort_order": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991,
            "description": "Position among siblings in the same parent and column. Array order is canonical: the server renumbers from 1."
          },
          "is_hidden": {
            "default": false,
            "description": "Whether the node is hidden: kept in the draft and absent from the published form.",
            "type": "boolean"
          },
          "type": {
            "type": "string",
            "const": "slider",
            "description": "Node type key that selects the meta shape."
          },
          "meta": {
            "description": "Type-specific content and settings. Omitted keys receive the current product defaults, which every read echoes back.",
            "$ref": "#/components/schemas/ModelPlatformNodeMetaSliderInput"
          }
        },
        "required": [
          "sort_order",
          "type"
        ],
        "additionalProperties": false,
        "title": "slider"
      },
      "ModelPlatformFormBlueprintNodeSwitchInput": {
        "type": "object",
        "properties": {
          "public_id": {
            "description": "Public ID of the node (4 characters). Optional on write: a present ID keeps or matches the item, an absent ID creates a new item with a server-minted ID.",
            "type": "string",
            "minLength": 4,
            "maxLength": 4,
            "pattern": "^[A-Za-z0-9_-]+$"
          },
          "parent_node_id": {
            "description": "Public ID of the layout row or question this node sits in, or null at the page root. Set together with column_index.",
            "anyOf": [
              {
                "type": "string",
                "minLength": 4,
                "maxLength": 4,
                "pattern": "^[A-Za-z0-9_-]+$"
              },
              {
                "type": "null"
              }
            ]
          },
          "column_index": {
            "description": "Zero-based column inside the parent, or null at the page root. Set together with parent_node_id.",
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 2
              },
              {
                "type": "null"
              }
            ]
          },
          "sort_order": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991,
            "description": "Position among siblings in the same parent and column. Array order is canonical: the server renumbers from 1."
          },
          "is_hidden": {
            "default": false,
            "description": "Whether the node is hidden: kept in the draft and absent from the published form.",
            "type": "boolean"
          },
          "type": {
            "type": "string",
            "const": "switch",
            "description": "Node type key that selects the meta shape."
          },
          "meta": {
            "description": "Type-specific content and settings. Omitted keys receive the current product defaults, which every read echoes back.",
            "$ref": "#/components/schemas/ModelPlatformNodeMetaSwitchInput"
          }
        },
        "required": [
          "sort_order",
          "type"
        ],
        "additionalProperties": false,
        "title": "switch"
      },
      "ModelPlatformFormBlueprintNodeTextInput": {
        "type": "object",
        "properties": {
          "public_id": {
            "description": "Public ID of the node (4 characters). Optional on write: a present ID keeps or matches the item, an absent ID creates a new item with a server-minted ID.",
            "type": "string",
            "minLength": 4,
            "maxLength": 4,
            "pattern": "^[A-Za-z0-9_-]+$"
          },
          "parent_node_id": {
            "description": "Public ID of the layout row or question this node sits in, or null at the page root. Set together with column_index.",
            "anyOf": [
              {
                "type": "string",
                "minLength": 4,
                "maxLength": 4,
                "pattern": "^[A-Za-z0-9_-]+$"
              },
              {
                "type": "null"
              }
            ]
          },
          "column_index": {
            "description": "Zero-based column inside the parent, or null at the page root. Set together with parent_node_id.",
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 2
              },
              {
                "type": "null"
              }
            ]
          },
          "sort_order": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991,
            "description": "Position among siblings in the same parent and column. Array order is canonical: the server renumbers from 1."
          },
          "is_hidden": {
            "default": false,
            "description": "Whether the node is hidden: kept in the draft and absent from the published form.",
            "type": "boolean"
          },
          "type": {
            "type": "string",
            "const": "text",
            "description": "Node type key that selects the meta shape."
          },
          "meta": {
            "description": "Type-specific content and settings. Omitted keys receive the current product defaults, which every read echoes back.",
            "$ref": "#/components/schemas/ModelPlatformNodeMetaTextInput"
          }
        },
        "required": [
          "sort_order",
          "type"
        ],
        "additionalProperties": false,
        "title": "text"
      },
      "ModelPlatformFormBlueprintNodeTextInputEmailInput": {
        "type": "object",
        "properties": {
          "public_id": {
            "description": "Public ID of the node (4 characters). Optional on write: a present ID keeps or matches the item, an absent ID creates a new item with a server-minted ID.",
            "type": "string",
            "minLength": 4,
            "maxLength": 4,
            "pattern": "^[A-Za-z0-9_-]+$"
          },
          "parent_node_id": {
            "description": "Public ID of the layout row or question this node sits in, or null at the page root. Set together with column_index.",
            "anyOf": [
              {
                "type": "string",
                "minLength": 4,
                "maxLength": 4,
                "pattern": "^[A-Za-z0-9_-]+$"
              },
              {
                "type": "null"
              }
            ]
          },
          "column_index": {
            "description": "Zero-based column inside the parent, or null at the page root. Set together with parent_node_id.",
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 2
              },
              {
                "type": "null"
              }
            ]
          },
          "sort_order": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991,
            "description": "Position among siblings in the same parent and column. Array order is canonical: the server renumbers from 1."
          },
          "is_hidden": {
            "default": false,
            "description": "Whether the node is hidden: kept in the draft and absent from the published form.",
            "type": "boolean"
          },
          "type": {
            "type": "string",
            "const": "text_input_email",
            "description": "Node type key that selects the meta shape."
          },
          "meta": {
            "description": "Type-specific content and settings. Omitted keys receive the current product defaults, which every read echoes back.",
            "$ref": "#/components/schemas/ModelPlatformNodeMetaTextInputEmailInput"
          }
        },
        "required": [
          "sort_order",
          "type"
        ],
        "additionalProperties": false,
        "title": "text_input_email"
      },
      "ModelPlatformFormBlueprintNodeTextInputLinkInput": {
        "type": "object",
        "properties": {
          "public_id": {
            "description": "Public ID of the node (4 characters). Optional on write: a present ID keeps or matches the item, an absent ID creates a new item with a server-minted ID.",
            "type": "string",
            "minLength": 4,
            "maxLength": 4,
            "pattern": "^[A-Za-z0-9_-]+$"
          },
          "parent_node_id": {
            "description": "Public ID of the layout row or question this node sits in, or null at the page root. Set together with column_index.",
            "anyOf": [
              {
                "type": "string",
                "minLength": 4,
                "maxLength": 4,
                "pattern": "^[A-Za-z0-9_-]+$"
              },
              {
                "type": "null"
              }
            ]
          },
          "column_index": {
            "description": "Zero-based column inside the parent, or null at the page root. Set together with parent_node_id.",
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 2
              },
              {
                "type": "null"
              }
            ]
          },
          "sort_order": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991,
            "description": "Position among siblings in the same parent and column. Array order is canonical: the server renumbers from 1."
          },
          "is_hidden": {
            "default": false,
            "description": "Whether the node is hidden: kept in the draft and absent from the published form.",
            "type": "boolean"
          },
          "type": {
            "type": "string",
            "const": "text_input_link",
            "description": "Node type key that selects the meta shape."
          },
          "meta": {
            "description": "Type-specific content and settings. Omitted keys receive the current product defaults, which every read echoes back.",
            "$ref": "#/components/schemas/ModelPlatformNodeMetaTextInputLinkInput"
          }
        },
        "required": [
          "sort_order",
          "type"
        ],
        "additionalProperties": false,
        "title": "text_input_link"
      },
      "ModelPlatformFormBlueprintNodeTextInputLongInput": {
        "type": "object",
        "properties": {
          "public_id": {
            "description": "Public ID of the node (4 characters). Optional on write: a present ID keeps or matches the item, an absent ID creates a new item with a server-minted ID.",
            "type": "string",
            "minLength": 4,
            "maxLength": 4,
            "pattern": "^[A-Za-z0-9_-]+$"
          },
          "parent_node_id": {
            "description": "Public ID of the layout row or question this node sits in, or null at the page root. Set together with column_index.",
            "anyOf": [
              {
                "type": "string",
                "minLength": 4,
                "maxLength": 4,
                "pattern": "^[A-Za-z0-9_-]+$"
              },
              {
                "type": "null"
              }
            ]
          },
          "column_index": {
            "description": "Zero-based column inside the parent, or null at the page root. Set together with parent_node_id.",
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 2
              },
              {
                "type": "null"
              }
            ]
          },
          "sort_order": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991,
            "description": "Position among siblings in the same parent and column. Array order is canonical: the server renumbers from 1."
          },
          "is_hidden": {
            "default": false,
            "description": "Whether the node is hidden: kept in the draft and absent from the published form.",
            "type": "boolean"
          },
          "type": {
            "type": "string",
            "const": "text_input_long",
            "description": "Node type key that selects the meta shape."
          },
          "meta": {
            "description": "Type-specific content and settings. Omitted keys receive the current product defaults, which every read echoes back.",
            "$ref": "#/components/schemas/ModelPlatformNodeMetaTextInputLongInput"
          }
        },
        "required": [
          "sort_order",
          "type"
        ],
        "additionalProperties": false,
        "title": "text_input_long"
      },
      "ModelPlatformFormBlueprintNodeTextInputShortInput": {
        "type": "object",
        "properties": {
          "public_id": {
            "description": "Public ID of the node (4 characters). Optional on write: a present ID keeps or matches the item, an absent ID creates a new item with a server-minted ID.",
            "type": "string",
            "minLength": 4,
            "maxLength": 4,
            "pattern": "^[A-Za-z0-9_-]+$"
          },
          "parent_node_id": {
            "description": "Public ID of the layout row or question this node sits in, or null at the page root. Set together with column_index.",
            "anyOf": [
              {
                "type": "string",
                "minLength": 4,
                "maxLength": 4,
                "pattern": "^[A-Za-z0-9_-]+$"
              },
              {
                "type": "null"
              }
            ]
          },
          "column_index": {
            "description": "Zero-based column inside the parent, or null at the page root. Set together with parent_node_id.",
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 2
              },
              {
                "type": "null"
              }
            ]
          },
          "sort_order": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991,
            "description": "Position among siblings in the same parent and column. Array order is canonical: the server renumbers from 1."
          },
          "is_hidden": {
            "default": false,
            "description": "Whether the node is hidden: kept in the draft and absent from the published form.",
            "type": "boolean"
          },
          "type": {
            "type": "string",
            "const": "text_input_short",
            "description": "Node type key that selects the meta shape."
          },
          "meta": {
            "description": "Type-specific content and settings. Omitted keys receive the current product defaults, which every read echoes back.",
            "$ref": "#/components/schemas/ModelPlatformNodeMetaTextInputShortInput"
          }
        },
        "required": [
          "sort_order",
          "type"
        ],
        "additionalProperties": false,
        "title": "text_input_short"
      },
      "ModelPlatformFormBlueprintNodeThankYouInput": {
        "type": "object",
        "properties": {
          "public_id": {
            "description": "Public ID of the node (4 characters). Optional on write: a present ID keeps or matches the item, an absent ID creates a new item with a server-minted ID.",
            "type": "string",
            "minLength": 4,
            "maxLength": 4,
            "pattern": "^[A-Za-z0-9_-]+$"
          },
          "parent_node_id": {
            "description": "Public ID of the layout row or question this node sits in, or null at the page root. Set together with column_index.",
            "anyOf": [
              {
                "type": "string",
                "minLength": 4,
                "maxLength": 4,
                "pattern": "^[A-Za-z0-9_-]+$"
              },
              {
                "type": "null"
              }
            ]
          },
          "column_index": {
            "description": "Zero-based column inside the parent, or null at the page root. Set together with parent_node_id.",
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 2
              },
              {
                "type": "null"
              }
            ]
          },
          "sort_order": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991,
            "description": "Position among siblings in the same parent and column. Array order is canonical: the server renumbers from 1."
          },
          "is_hidden": {
            "default": false,
            "description": "Whether the node is hidden: kept in the draft and absent from the published form.",
            "type": "boolean"
          },
          "type": {
            "type": "string",
            "const": "thank_you",
            "description": "Node type key that selects the meta shape."
          },
          "meta": {
            "description": "Type-specific content and settings. Omitted keys receive the current product defaults, which every read echoes back.",
            "$ref": "#/components/schemas/ModelPlatformNodeMetaThankYouInput"
          }
        },
        "required": [
          "sort_order",
          "type"
        ],
        "additionalProperties": false,
        "title": "thank_you"
      },
      "ModelPlatformFormBlueprintNodeTimePickerInput": {
        "type": "object",
        "properties": {
          "public_id": {
            "description": "Public ID of the node (4 characters). Optional on write: a present ID keeps or matches the item, an absent ID creates a new item with a server-minted ID.",
            "type": "string",
            "minLength": 4,
            "maxLength": 4,
            "pattern": "^[A-Za-z0-9_-]+$"
          },
          "parent_node_id": {
            "description": "Public ID of the layout row or question this node sits in, or null at the page root. Set together with column_index.",
            "anyOf": [
              {
                "type": "string",
                "minLength": 4,
                "maxLength": 4,
                "pattern": "^[A-Za-z0-9_-]+$"
              },
              {
                "type": "null"
              }
            ]
          },
          "column_index": {
            "description": "Zero-based column inside the parent, or null at the page root. Set together with parent_node_id.",
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 2
              },
              {
                "type": "null"
              }
            ]
          },
          "sort_order": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991,
            "description": "Position among siblings in the same parent and column. Array order is canonical: the server renumbers from 1."
          },
          "is_hidden": {
            "default": false,
            "description": "Whether the node is hidden: kept in the draft and absent from the published form.",
            "type": "boolean"
          },
          "type": {
            "type": "string",
            "const": "time_picker",
            "description": "Node type key that selects the meta shape."
          },
          "meta": {
            "description": "Type-specific content and settings. Omitted keys receive the current product defaults, which every read echoes back.",
            "$ref": "#/components/schemas/ModelPlatformNodeMetaTimePickerInput"
          }
        },
        "required": [
          "sort_order",
          "type"
        ],
        "additionalProperties": false,
        "title": "time_picker"
      },
      "ModelPlatformFormBlueprintNodeYesNoInput": {
        "type": "object",
        "properties": {
          "public_id": {
            "description": "Public ID of the node (4 characters). Optional on write: a present ID keeps or matches the item, an absent ID creates a new item with a server-minted ID.",
            "type": "string",
            "minLength": 4,
            "maxLength": 4,
            "pattern": "^[A-Za-z0-9_-]+$"
          },
          "parent_node_id": {
            "description": "Public ID of the layout row or question this node sits in, or null at the page root. Set together with column_index.",
            "anyOf": [
              {
                "type": "string",
                "minLength": 4,
                "maxLength": 4,
                "pattern": "^[A-Za-z0-9_-]+$"
              },
              {
                "type": "null"
              }
            ]
          },
          "column_index": {
            "description": "Zero-based column inside the parent, or null at the page root. Set together with parent_node_id.",
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 2
              },
              {
                "type": "null"
              }
            ]
          },
          "sort_order": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991,
            "description": "Position among siblings in the same parent and column. Array order is canonical: the server renumbers from 1."
          },
          "is_hidden": {
            "default": false,
            "description": "Whether the node is hidden: kept in the draft and absent from the published form.",
            "type": "boolean"
          },
          "type": {
            "type": "string",
            "const": "yes_no",
            "description": "Node type key that selects the meta shape."
          },
          "meta": {
            "description": "Type-specific content and settings. Omitted keys receive the current product defaults, which every read echoes back.",
            "$ref": "#/components/schemas/ModelPlatformNodeMetaYesNoInput"
          }
        },
        "required": [
          "sort_order",
          "type"
        ],
        "additionalProperties": false,
        "title": "yes_no"
      },
      "ModelPlatformFormBlueprintPageInput": {
        "type": "object",
        "properties": {
          "public_id": {
            "description": "Public ID of the page (4 characters). Optional on write: a present ID keeps or matches the item, an absent ID creates a new item with a server-minted ID.",
            "type": "string",
            "minLength": 4,
            "maxLength": 4,
            "pattern": "^[A-Za-z0-9_-]+$"
          },
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 255,
            "description": "Page name shown in the editor and used by the Form Title block when use_page_name is true."
          },
          "type": {
            "description": "Page kind: intro, normal, or final. An intro page comes first. Final pages are endings and come last; the first is the Default ending, the others are reached by jump rules.",
            "$ref": "#/components/schemas/ModelPageTypeInput"
          },
          "is_hidden": {
            "default": false,
            "description": "Whether the page is hidden: kept in the draft, skipped by publish validation, and absent from the published form.",
            "type": "boolean"
          },
          "is_entrypoint": {
            "description": "Whether respondents start on this page. Always the first page: true on any other page is rejected on write.",
            "type": "boolean"
          },
          "is_auto_jump_next_page": {
            "default": false,
            "description": "Whether answering the page's single eligible question advances to the next page automatically. Derived by the server from the page's blocks; ignored on write.",
            "readOnly": true,
            "type": "boolean"
          },
          "nodes": {
            "maxItems": 101,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ModelPlatformFormBlueprintNodeInput"
            },
            "description": "Blocks on the page in display order. Layout children reference their row through parent_node_id."
          }
        },
        "required": [
          "name",
          "type",
          "nodes"
        ],
        "additionalProperties": false
      },
      "ModelPlatformFormBlueprintPropertiesInput": {
        "type": "object",
        "properties": {
          "show_branding": {
            "description": "Whether the fomr branding is shown. Forced on for Free organizations; Pro organizations can hide it, and a form created on Pro without this key hides it.",
            "x-fomr-plan": "pro",
            "x-fomr-plan-feature": "hide_branding",
            "$ref": "#/components/schemas/ModelNullableBooleanAsIntInput"
          },
          "auto_jump_next_page": {
            "description": "Default for automatic page advancing on pages with a single eligible question.",
            "$ref": "#/components/schemas/ModelNullableBooleanAsIntInput"
          },
          "allow_back_navigation": {
            "description": "Whether respondents may go back to earlier pages. When off, Back buttons are hidden on every page. Applies to the live form without republishing.",
            "$ref": "#/components/schemas/ModelNullableBooleanAsIntInput"
          },
          "meta_title": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 255
              },
              {
                "type": "null"
              }
            ],
            "description": "Title used in link previews and search results.",
            "x-fomr-plan": "pro",
            "x-fomr-plan-feature": "meta_tags"
          },
          "meta_description": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 500
              },
              {
                "type": "null"
              }
            ],
            "description": "Description used in link previews and search results.",
            "x-fomr-plan": "pro",
            "x-fomr-plan-feature": "meta_tags"
          },
          "meta_index": {
            "description": "Whether search engines may index the form.",
            "x-fomr-plan": "pro",
            "x-fomr-plan-feature": "meta_tags",
            "$ref": "#/components/schemas/ModelNullableBooleanAsIntInput"
          },
          "meta_favicon_url": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 1000,
                "format": "uri"
              },
              {
                "type": "null"
              }
            ],
            "description": "https URL of the favicon shown in the browser tab.",
            "x-fomr-plan": "pro",
            "x-fomr-plan-feature": "meta_tags"
          },
          "meta_ogimage_url": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 1000,
                "format": "uri"
              },
              {
                "type": "null"
              }
            ],
            "description": "https URL of the image used in link previews.",
            "x-fomr-plan": "pro",
            "x-fomr-plan-feature": "meta_tags"
          },
          "partial_response_capture_enabled": {
            "description": "Whether partial responses are captured before the form is submitted.",
            "x-fomr-plan": "pro",
            "x-fomr-plan-feature": "partial_response_access",
            "$ref": "#/components/schemas/ModelNullableBooleanAsIntInput"
          }
        },
        "additionalProperties": false
      },
      "ModelPlatformFormBlueprintSettingsInput": {
        "type": "object",
        "properties": {
          "email_notifications_enabled_owner": {
            "description": "Whether the form owner receives an email for each submission.",
            "$ref": "#/components/schemas/ModelNullableBooleanAsIntInput"
          },
          "email_notifications_enabled_respondent": {
            "description": "Whether respondents receive a confirmation email.",
            "x-fomr-plan": "pro",
            "x-fomr-plan-feature": "respondent_email_notifications",
            "$ref": "#/components/schemas/ModelNullableBooleanAsIntInput"
          },
          "email_notifications_recipients_owner": {
            "maxItems": 10,
            "type": "array",
            "items": {
              "type": "string",
              "maxLength": 320,
              "format": "email",
              "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
            },
            "description": "Email addresses of the organization members who receive the owner email, at most ten. Each must belong to an active member of the organization. Turning owner emails on while the list is empty adds the token owner, as the app does; an empty list sends no owner email."
          },
          "email_notifications_recipient_respondent": {
            "anyOf": [
              {
                "type": "string",
                "minLength": 4,
                "maxLength": 4,
                "pattern": "^[A-Za-z0-9_-]+$"
              },
              {
                "type": "null"
              }
            ],
            "description": "Public ID of the Email block (text_input_email) whose answer receives the respondent confirmation, or null. Respondent emails are not sent until it names an Email block in the form.",
            "x-fomr-plan": "pro",
            "x-fomr-plan-feature": "respondent_email_notifications"
          }
        },
        "additionalProperties": false
      },
      "ModelPlatformFormBlueprintStylesInput": {
        "type": "object",
        "properties": {
          "theme_id": {
            "anyOf": [
              {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$"
              },
              {
                "type": "null"
              }
            ],
            "description": "ID of the theme to apply: an organization theme or a system theme from listThemes. Left out on a draft write, the current theme is kept; null applies the default theme. Changing the theme clears the color, font, border, and option layout overrides, as the app does."
          },
          "theme_name": {
            "description": "Name of the applied theme. Read-only.",
            "readOnly": true,
            "type": "string"
          },
          "override_properties": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelPlatformFormBlueprintThemeOverrideInput"
              },
              {
                "type": "null"
              }
            ],
            "description": "Per-form overrides of the theme's properties, or null. Read-only: edited in the app.",
            "readOnly": true
          }
        },
        "additionalProperties": false
      },
      "ModelPlatformFormBlueprintThemeOverrideInput": {
        "type": "object",
        "properties": {
          "font": {
            "description": "Font family name.",
            "type": "string"
          },
          "background_color": {
            "description": "Page background color as a hex value.",
            "anyOf": [
              {
                "type": "string",
                "pattern": "^#([0-9A-Fa-f]{3}|[0-9A-Fa-f]{6})$"
              },
              {
                "type": "null"
              }
            ]
          },
          "background_url": {
            "description": "Background image URL.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelThemeImageUrlInput"
              },
              {
                "type": "null"
              }
            ]
          },
          "text_color": {
            "description": "Main text color as a hex value.",
            "anyOf": [
              {
                "type": "string",
                "pattern": "^#([0-9A-Fa-f]{3}|[0-9A-Fa-f]{6})$"
              },
              {
                "type": "null"
              }
            ]
          },
          "secondary_text_color": {
            "description": "Secondary text color as a hex value.",
            "anyOf": [
              {
                "type": "string",
                "pattern": "^#([0-9A-Fa-f]{3}|[0-9A-Fa-f]{6})$"
              },
              {
                "type": "null"
              }
            ]
          },
          "primary_color": {
            "description": "Primary color palette as a JSON-encoded array of hex values.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "option_colors": {
            "description": "Option color palette as a JSON-encoded array of hex values.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "primary_text_color": {
            "description": "Text color used on primary surfaces as a hex value.",
            "anyOf": [
              {
                "type": "string",
                "pattern": "^#([0-9A-Fa-f]{3}|[0-9A-Fa-f]{6})$"
              },
              {
                "type": "null"
              }
            ]
          },
          "border_color": {
            "description": "Border color as a hex value.",
            "anyOf": [
              {
                "type": "string",
                "pattern": "^#([0-9A-Fa-f]{3}|[0-9A-Fa-f]{6})$"
              },
              {
                "type": "null"
              }
            ]
          },
          "shadow_color": {
            "description": "Shadow color as a hex value.",
            "anyOf": [
              {
                "type": "string",
                "pattern": "^#([0-9A-Fa-f]{3}|[0-9A-Fa-f]{6})$"
              },
              {
                "type": "null"
              }
            ]
          },
          "dimmed_color": {
            "description": "Dimmed text color as a hex value.",
            "anyOf": [
              {
                "type": "string",
                "pattern": "^#([0-9A-Fa-f]{3}|[0-9A-Fa-f]{6})$"
              },
              {
                "type": "null"
              }
            ]
          },
          "error_color": {
            "description": "Error color as a hex value.",
            "anyOf": [
              {
                "type": "string",
                "pattern": "^#([0-9A-Fa-f]{3}|[0-9A-Fa-f]{6})$"
              },
              {
                "type": "null"
              }
            ]
          },
          "input_background_color": {
            "description": "Background color of input fields as a hex value.",
            "anyOf": [
              {
                "type": "string",
                "pattern": "^#([0-9A-Fa-f]{3}|[0-9A-Fa-f]{6})$"
              },
              {
                "type": "null"
              }
            ]
          },
          "input_text_color": {
            "description": "Text color inside input fields as a hex value.",
            "anyOf": [
              {
                "type": "string",
                "pattern": "^#([0-9A-Fa-f]{3}|[0-9A-Fa-f]{6})$"
              },
              {
                "type": "null"
              }
            ]
          },
          "form_width": {
            "description": "Form width: xs, sm, md, lg, or xl.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelStyleSizeInput"
              },
              {
                "type": "null"
              }
            ]
          },
          "form_size": {
            "description": "Form text size: xs, sm, md, lg, or xl.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelStyleSizeInput"
              },
              {
                "type": "null"
              }
            ]
          },
          "form_spacing": {
            "description": "Spacing between blocks: xs, sm, md, lg, or xl.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelStyleSizeInput"
              },
              {
                "type": "null"
              }
            ]
          },
          "form_align_x": {
            "description": "Horizontal alignment of the form: left, center, or right.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelStyleAlignXInput"
              },
              {
                "type": "null"
              }
            ]
          },
          "form_align_y": {
            "description": "Vertical alignment of the form: top or center.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelStyleAlignYInput"
              },
              {
                "type": "null"
              }
            ]
          },
          "is_form_background_color": {
            "description": "Whether the form card uses a solid background color.",
            "anyOf": [
              {
                "description": "Nullable integer boolean: 1, 0, or null on read; true or false (or 1 or 0) accepted on write.",
                "anyOf": [
                  {
                    "anyOf": [
                      {
                        "type": "boolean"
                      },
                      {
                        "type": "number",
                        "enum": [
                          0,
                          1
                        ]
                      }
                    ]
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "is_form_background_blur": {
            "description": "Whether the form card background is blurred.",
            "anyOf": [
              {
                "description": "Nullable integer boolean: 1, 0, or null on read; true or false (or 1 or 0) accepted on write.",
                "anyOf": [
                  {
                    "anyOf": [
                      {
                        "type": "boolean"
                      },
                      {
                        "type": "number",
                        "enum": [
                          0,
                          1
                        ]
                      }
                    ]
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "border_radius": {
            "description": "Corner rounding: none, small, or full.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelStyleBorderRadiusInput"
              },
              {
                "type": "null"
              }
            ]
          },
          "border_shadow": {
            "description": "Card shadow: none, small, or large.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelStyleBorderShadowInput"
              },
              {
                "type": "null"
              }
            ]
          },
          "logo_url": {
            "description": "Logo image URL.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelThemeImageUrlInput"
              },
              {
                "type": "null"
              }
            ]
          },
          "logo_align_x": {
            "description": "Horizontal alignment of the logo: left, center, or right.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelStyleLogoAlignXInput"
              },
              {
                "type": "null"
              }
            ]
          },
          "is_logo_hidden": {
            "description": "Whether the logo is hidden.",
            "anyOf": [
              {
                "description": "Nullable integer boolean: 1, 0, or null on read; true or false (or 1 or 0) accepted on write.",
                "anyOf": [
                  {
                    "anyOf": [
                      {
                        "type": "boolean"
                      },
                      {
                        "type": "number",
                        "enum": [
                          0,
                          1
                        ]
                      }
                    ]
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "logo_width": {
            "description": "Logo width in pixels; null keeps the natural size.",
            "anyOf": [
              {
                "type": "integer",
                "minimum": 32,
                "maximum": 4096
              },
              {
                "type": "null"
              }
            ]
          },
          "is_logo_full_width": {
            "description": "Whether the logo stretches to the full form width.",
            "anyOf": [
              {
                "description": "Nullable integer boolean: 1, 0, or null on read; true or false (or 1 or 0) accepted on write.",
                "anyOf": [
                  {
                    "anyOf": [
                      {
                        "type": "boolean"
                      },
                      {
                        "type": "number",
                        "enum": [
                          0,
                          1
                        ]
                      }
                    ]
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "page_actions_show_back_button": {
            "description": "Whether pages show a Back button by default.",
            "anyOf": [
              {
                "description": "Nullable integer boolean: 1, 0, or null on read; true or false (or 1 or 0) accepted on write.",
                "anyOf": [
                  {
                    "anyOf": [
                      {
                        "type": "boolean"
                      },
                      {
                        "type": "number",
                        "enum": [
                          0,
                          1
                        ]
                      }
                    ]
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "page_actions_show_button_arrows": {
            "description": "Whether page buttons show directional arrows by default.",
            "anyOf": [
              {
                "description": "Nullable integer boolean: 1, 0, or null on read; true or false (or 1 or 0) accepted on write.",
                "anyOf": [
                  {
                    "anyOf": [
                      {
                        "type": "boolean"
                      },
                      {
                        "type": "number",
                        "enum": [
                          0,
                          1
                        ]
                      }
                    ]
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "page_actions_alignment": {
            "description": "Default horizontal alignment of page buttons: left, center, right, or justify.",
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "left",
                  "center",
                  "right",
                  "justify"
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "select_options_layout": {
            "description": "Default option layout: list, bordered, or inline.",
            "anyOf": [
              {
                "description": "Option layout: list, bordered, or inline; applies only when is_select_options_layout_override is true.",
                "type": "string",
                "enum": [
                  "list",
                  "bordered",
                  "inline"
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "font_id": {
            "description": "ID of the font.",
            "anyOf": [
              {
                "type": "string",
                "maxLength": 100
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "additionalProperties": false
      },
      "ModelPlatformFormConversionBlockedError": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string",
            "const": "FORM_CONVERSION_BLOCKED",
            "description": "The conversion was refused: a form cannot become a Private Template while it is published or holds submissions."
          },
          "message": {
            "type": "string",
            "description": "A human-readable explanation. Not part of the contract; never branch on it."
          },
          "request_id": {
            "type": "string",
            "description": "The ID of the failed request, also sent as the X-Request-Id response header."
          },
          "reason": {
            "type": "string",
            "enum": [
              "published",
              "has_submissions",
              "public_template"
            ],
            "description": "Why the conversion was refused: published means unpublish first, has_submissions means duplicate instead. public_template is reserved and never returned: Public Templates are invisible to the Platform API and answer 404 NOT_FOUND."
          }
        },
        "required": [
          "code",
          "message",
          "request_id",
          "reason"
        ]
      },
      "ModelPlatformFormConversionError": {
        "anyOf": [
          {
            "$ref": "#/components/schemas/ModelPlatformFormConversionBlockedError"
          },
          {
            "$ref": "#/components/schemas/ModelPlatformFormArchivedError"
          }
        ],
        "description": "A refused conversion: the form is published or holds submissions, or it is archived. Branch on code."
      },
      "ModelPlatformFormCreateResult": {
        "type": "object",
        "properties": {
          "public_id": {
            "description": "The public ID of the form. Use it in every other form call.",
            "$ref": "#/components/schemas/ModelFormPublicId"
          },
          "name": {
            "type": "string",
            "description": "Form name shown in the app."
          },
          "is_template": {
            "type": "boolean",
            "description": "Whether the resource is a Private Template rather than a form."
          },
          "status": {
            "$ref": "#/components/schemas/ModelPlatformFormStatus"
          },
          "has_unpublished_changes": {
            "type": "boolean",
            "description": "Whether publishing would change what respondents see. True for a form that has never been published."
          },
          "published_version": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": -9007199254740991,
                "maximum": 9007199254740991
              },
              {
                "type": "null"
              }
            ],
            "description": "The live version number, or null while nothing is published."
          },
          "published_at": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelDate"
              },
              {
                "type": "null"
              }
            ],
            "description": "When the live version was published, or null while nothing is published."
          },
          "source_template_public_id": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelFormPublicId"
              },
              {
                "type": "null"
              }
            ],
            "description": "The template this form started from, or null. Read-only: set once when the form is created.",
            "readOnly": true
          },
          "workspace_public_id": {
            "type": "string",
            "minLength": 4,
            "maxLength": 4,
            "description": "The workspace the form belongs to. Change it with the move operation.",
            "$ref": "#/components/schemas/ModelPlatformWorkspacePublicId"
          },
          "access": {
            "description": "Whether the form takes submissions.",
            "$ref": "#/components/schemas/ModelPlatformFormAccess"
          },
          "submissions": {
            "description": "How many submissions the form holds.",
            "$ref": "#/components/schemas/ModelPlatformFormSubmissionCounts"
          },
          "urls": {
            "description": "Where to open the form.",
            "$ref": "#/components/schemas/ModelPlatformFormUrls"
          },
          "domain": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelPlatformFormDomain"
              },
              {
                "type": "null"
              }
            ],
            "description": "The custom domain and slug the share link uses, or null for the fomr link. Set it with setFormDomain and clear it with deleteFormDomain."
          },
          "preview_image_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Thumbnail of the form, or null when none has been generated yet."
          },
          "created_at": {
            "description": "When the form was created.",
            "$ref": "#/components/schemas/ModelDate"
          },
          "updated_at": {
            "description": "When the form was last changed.",
            "$ref": "#/components/schemas/ModelDate"
          },
          "draft": {
            "description": "The Draft Document as it was stored, with every minted ID and materialized default. Persist the IDs from here; the draft ETag of this document is sent as the ETag response header.",
            "$ref": "#/components/schemas/ModelPlatformCanonicalBlueprint"
          }
        },
        "required": [
          "public_id",
          "name",
          "is_template",
          "status",
          "has_unpublished_changes",
          "published_version",
          "published_at",
          "source_template_public_id",
          "workspace_public_id",
          "access",
          "submissions",
          "urls",
          "domain",
          "preview_image_url",
          "created_at",
          "updated_at",
          "draft"
        ]
      },
      "ModelPlatformFormDocumentNotFoundError": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string",
            "enum": [
              "NOT_FOUND",
              "FORM_NOT_PUBLISHED"
            ],
            "description": "NOT_FOUND when the form is unreachable; FORM_NOT_PUBLISHED when it exists but has no published version."
          },
          "message": {
            "type": "string",
            "description": "A human-readable explanation. Not part of the contract; never branch on it."
          },
          "request_id": {
            "type": "string",
            "description": "The ID of the failed request, also sent as the X-Request-Id response header."
          }
        },
        "required": [
          "code",
          "message",
          "request_id"
        ]
      },
      "ModelPlatformFormDomain": {
        "type": "object",
        "properties": {
          "host": {
            "description": "The custom domain of the share link, such as forms.example.com.",
            "$ref": "#/components/schemas/ModelDomainHost"
          },
          "slug": {
            "description": "The path after the host, starting with a slash.",
            "$ref": "#/components/schemas/ModelDomainSlug"
          },
          "status": {
            "description": "Verification state of the domain: verified, pending, or failed.",
            "$ref": "#/components/schemas/ModelDomainStatus"
          },
          "is_active": {
            "type": "boolean",
            "description": "Whether the plan of the organization keeps the domain serving forms."
          },
          "url": {
            "type": "string",
            "format": "uri",
            "description": "The link on the custom domain. It becomes urls.share once the domain is verified and active and a version is published."
          }
        },
        "required": [
          "host",
          "slug",
          "status",
          "is_active",
          "url"
        ]
      },
      "ModelPlatformFormDomainUpdateInputInput": {
        "type": "object",
        "properties": {
          "domain": {
            "description": "Host of a verified, active domain of the organization, as listDomains returns it. Matched without regard to case.",
            "$ref": "#/components/schemas/ModelDomainHostInput"
          },
          "slug": {
            "description": "Path after the host. Trailing slashes are removed and a leading slash is added, as the app does; the result holds letters, digits, -, _, and /, and no other form may use it on the same domain. Left out, the slug is /{form_public_id}.",
            "type": "string",
            "maxLength": 100
          }
        },
        "required": [
          "domain"
        ],
        "additionalProperties": false
      },
      "ModelPlatformFormDryRunResult": {
        "type": "object",
        "properties": {
          "dry_run": {
            "type": "boolean",
            "const": true,
            "description": "Always true. Nothing was written: no form exists, and the IDs below are not reserved for a later call."
          },
          "draft": {
            "description": "The Draft Document the real call would have stored.",
            "$ref": "#/components/schemas/ModelPlatformCanonicalBlueprint"
          }
        },
        "required": [
          "dry_run",
          "draft"
        ]
      },
      "ModelPlatformFormDuplicateInputInput": {
        "type": "object",
        "properties": {
          "name": {
            "description": "Name of the copy. Left out, the source name gains a copy suffix, the same rule the app applies.",
            "type": "string",
            "minLength": 1,
            "maxLength": 100
          },
          "is_template": {
            "description": "Whether the copy is a Private Template. Left out, the copy keeps the kind of the source. Send false against a Private Template to start a form from it, which records the template lineage and counts a template use.",
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "ModelPlatformFormGenerateInputInput": {
        "type": "object",
        "properties": {
          "prompt": {
            "type": "string",
            "minLength": 1,
            "maxLength": 5000,
            "description": "Plain-language description of the form to generate."
          },
          "is_template": {
            "description": "Whether the generated form is created as a Private Template.",
            "type": "boolean"
          },
          "workspace_public_id": {
            "description": "The workspace to create the form in. Left out, the form lands in the Default Workspace.",
            "$ref": "#/components/schemas/ModelPlatformWorkspacePublicIdInput"
          }
        },
        "required": [
          "prompt"
        ],
        "additionalProperties": false,
        "description": "A prompt for synchronous AI form generation, whether the result should be a Private Template, and its workspace."
      },
      "ModelPlatformFormGenerateUnavailableError": {
        "anyOf": [
          {
            "$ref": "#/components/schemas/ModelPlatformAiServiceUnavailableError"
          },
          {
            "$ref": "#/components/schemas/ModelPlatformServiceUnavailableError"
          }
        ],
        "description": "Generation could not run because the AI provider or the Platform write pool was temporarily unavailable."
      },
      "ModelPlatformFormList": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ModelPlatformForm"
            },
            "description": "One page of forms, ordered by the requested sort."
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Pass this back as cursor to read the next page. Null on the last page."
          }
        },
        "required": [
          "data",
          "next_cursor"
        ]
      },
      "ModelPlatformFormMoveInputInput": {
        "type": "object",
        "properties": {
          "workspace_public_id": {
            "type": "string",
            "minLength": 4,
            "maxLength": 4,
            "description": "The workspace to move the form into. Moving needs the workspaces plan feature; moving into the current workspace is a no-op.",
            "$ref": "#/components/schemas/ModelPlatformWorkspacePublicIdInput"
          }
        },
        "required": [
          "workspace_public_id"
        ],
        "additionalProperties": false
      },
      "ModelPlatformFormNoDraftError": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string",
            "const": "NO_DRAFT_DURING_PUBLISH",
            "description": "The form has no draft version to publish."
          },
          "message": {
            "type": "string",
            "description": "A human-readable explanation. Not part of the contract; never branch on it."
          },
          "request_id": {
            "type": "string",
            "description": "The ID of the failed request, also sent as the X-Request-Id response header."
          }
        },
        "required": [
          "code",
          "message",
          "request_id"
        ]
      },
      "ModelPlatformFormPublishConflictError": {
        "anyOf": [
          {
            "$ref": "#/components/schemas/ModelPlatformFormArchivedError"
          },
          {
            "$ref": "#/components/schemas/ModelPlatformFormNoDraftError"
          }
        ],
        "description": "A form that cannot be published as it stands: it is archived, or it holds no draft. Branch on code."
      },
      "ModelPlatformFormPublishRejectedError": {
        "anyOf": [
          {
            "$ref": "#/components/schemas/ModelPlatformFormPublishValidationError"
          },
          {
            "$ref": "#/components/schemas/ModelPlatformFormSafetyRejectedError"
          }
        ],
        "description": "A publish the server refused: the draft has Publish Issues, or safety checks flagged it. Branch on code."
      },
      "ModelPlatformFormPublishValidationError": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string",
            "const": "FORM_PUBLISH_VALIDATION_FAILED",
            "description": "The draft is not complete enough to publish. Nothing was written."
          },
          "message": {
            "type": "string",
            "description": "A human-readable explanation. Not part of the contract; never branch on it."
          },
          "request_id": {
            "type": "string",
            "description": "The ID of the failed request, also sent as the X-Request-Id response header."
          },
          "issues": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ModelPlatformPublishIssue"
            },
            "description": "Every Publish Issue that blocked the publish. The same list validate returns."
          }
        },
        "required": [
          "code",
          "message",
          "request_id",
          "issues"
        ]
      },
      "ModelPlatformFormSafetyRejectedError": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string",
            "const": "FORM_SAFETY_REJECTED",
            "description": "Automated safety checks flagged the draft. Nothing was published; the form and its owner are held for review."
          },
          "message": {
            "type": "string",
            "description": "A human-readable explanation. Not part of the contract; never branch on it."
          },
          "request_id": {
            "type": "string",
            "description": "The ID of the failed request, also sent as the X-Request-Id response header."
          }
        },
        "required": [
          "code",
          "message",
          "request_id"
        ]
      },
      "ModelPlatformFormStatus": {
        "type": "string",
        "enum": [
          "draft",
          "published",
          "archived"
        ],
        "description": "Lifecycle state: draft while nothing is published, published once a version is live, archived when the form is no longer editable."
      },
      "ModelPlatformFormSubmissionCounts": {
        "type": "object",
        "properties": {
          "completed_count": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991,
            "description": "Submissions the respondent finished."
          },
          "partial_count": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991,
            "description": "Partial responses captured before the respondent finished."
          }
        },
        "required": [
          "completed_count",
          "partial_count"
        ]
      },
      "ModelPlatformFormUrls": {
        "type": "object",
        "properties": {
          "editor": {
            "type": "string",
            "format": "uri",
            "description": "The form in the fomr editor. Always present; opening it needs an app session, not a token."
          },
          "share": {
            "anyOf": [
              {
                "type": "string",
                "format": "uri"
              },
              {
                "type": "null"
              }
            ],
            "description": "The public link respondents use, or null while no version is published."
          }
        },
        "required": [
          "editor",
          "share"
        ]
      },
      "ModelPlatformFormValidationResult": {
        "type": "object",
        "properties": {
          "valid": {
            "type": "boolean",
            "description": "Whether the stored draft would publish right now, including the plan, email, and safety checks publish runs."
          },
          "issues": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ModelPlatformPublishIssue"
            },
            "description": "Every Publish Issue the stored draft holds. Empty when valid is true."
          },
          "would_publish_version": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991,
            "description": "Point-in-time version number publish would give the form, including when issues must first be fixed. It is the latest published version when the draft has not changed since that publish, and the next number otherwise. A concurrent publish can change it."
          },
          "share_url": {
            "type": "string",
            "format": "uri",
            "description": "The configured public link the form would have after publishing. Validation does not publish or activate this link."
          }
        },
        "required": [
          "valid",
          "issues",
          "would_publish_version",
          "share_url"
        ]
      },
      "ModelPlatformHiddenValueDeclarationsInput": {
        "maxItems": 50,
        "type": "array",
        "items": {
          "type": "object",
          "properties": {
            "key": {
              "description": "Key of the hidden value: lowercase letters, digits, underscores, and hyphens, starting with a letter.",
              "$ref": "#/components/schemas/ModelHiddenValueKeyInput"
            },
            "default_value": {
              "description": "Value used when the respondent's URL does not supply the key.",
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 500
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "key"
          ],
          "additionalProperties": false
        }
      },
      "ModelPlatformIntegrationConnection": {
        "type": "object",
        "properties": {
          "public_id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 22,
            "description": "The public ID of the connection. Use it as connection_public_id in the config of a workflow node."
          },
          "integration_key": {
            "type": "string",
            "enum": [
              "google-sheet"
            ],
            "description": "The provider the connection belongs to. google-sheet is the Google Sheets connection the google_sheets_add_row node uses."
          },
          "display_name": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 320
              },
              {
                "type": "null"
              }
            ],
            "description": "The account name the provider reported, as the app shows it, or null when it is not known."
          },
          "account_email": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 320,
                "format": "email",
                "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
              },
              {
                "type": "null"
              }
            ],
            "description": "The email address of the connected account, or null when the provider did not report one."
          },
          "status": {
            "description": "connected while it can be used, invalid when the provider rejected it and it must be reconnected in the app, disconnected once removed. Workflow nodes can only reference connected connections.",
            "$ref": "#/components/schemas/ModelIntegrationConnectionStatus"
          },
          "last_connected_at": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelDate"
              },
              {
                "type": "null"
              }
            ],
            "description": "When the account was last connected or reconnected, or null."
          },
          "created_at": {
            "description": "When the connection was first made.",
            "$ref": "#/components/schemas/ModelDate"
          }
        },
        "required": [
          "public_id",
          "integration_key",
          "display_name",
          "account_email",
          "status",
          "last_connected_at",
          "created_at"
        ]
      },
      "ModelPlatformIntegrationConnectionList": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ModelPlatformIntegrationConnection"
            },
            "description": "Every integration connection of the organization, most recently updated first. Credentials are never returned."
          }
        },
        "required": [
          "data"
        ]
      },
      "ModelPlatformInvalidInputError": {
        "type": "object",
        "properties": {
          "code": {
            "description": "The stable code to branch on.",
            "$ref": "#/components/schemas/ModelPlatformErrorCode"
          },
          "message": {
            "type": "string",
            "description": "A human-readable explanation. Not part of the contract; never branch on it."
          },
          "request_id": {
            "type": "string",
            "description": "The ID of the failed request, also sent as the X-Request-Id response header."
          },
          "issues": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ModelPlatformErrorIssue"
            },
            "description": "Every value the request got wrong."
          }
        },
        "required": [
          "code",
          "message",
          "request_id",
          "issues"
        ]
      },
      "ModelPlatformLogicRulesInput": {
        "maxItems": 100,
        "type": "array",
        "items": {
          "type": "object",
          "properties": {
            "public_id": {
              "description": "Public ID of the rule, unique within the form. 1-22 URL-safe characters.",
              "$ref": "#/components/schemas/ModelLogicRulePublicIdInput"
            },
            "conditions": {
              "type": "object",
              "properties": {
                "match": {
                  "description": "Whether all or any of the items must match. A rule without items always applies.",
                  "$ref": "#/components/schemas/ModelLogicMatchInput"
                },
                "items": {
                  "type": "array",
                  "items": {
                    "oneOf": [
                      {
                        "type": "object",
                        "properties": {
                          "kind": {
                            "type": "string",
                            "const": "condition",
                            "description": "Marks a single condition."
                          },
                          "id": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 22,
                            "pattern": "^[A-Za-z0-9_-]+$",
                            "description": "ID of this item, unique within the rule. 1-22 URL-safe characters."
                          },
                          "subject": {
                            "oneOf": [
                              {
                                "type": "object",
                                "properties": {
                                  "type": {
                                    "type": "string",
                                    "const": "answer",
                                    "description": "What the condition tests."
                                  },
                                  "node_public_id": {
                                    "type": "string",
                                    "minLength": 1,
                                    "maxLength": 22,
                                    "pattern": "^[A-Za-z0-9_-]+$",
                                    "description": "Public ID of the question whose answer is tested."
                                  }
                                },
                                "required": [
                                  "type",
                                  "node_public_id"
                                ],
                                "additionalProperties": false
                              },
                              {
                                "type": "object",
                                "properties": {
                                  "type": {
                                    "type": "string",
                                    "const": "hidden_value",
                                    "description": "What the condition tests."
                                  },
                                  "key": {
                                    "description": "Key of the Hidden value that is tested.",
                                    "$ref": "#/components/schemas/ModelHiddenValueKeyInput"
                                  }
                                },
                                "required": [
                                  "type",
                                  "key"
                                ],
                                "additionalProperties": false
                              },
                              {
                                "type": "object",
                                "properties": {
                                  "type": {
                                    "type": "string",
                                    "const": "calculated_value",
                                    "description": "What the condition tests."
                                  },
                                  "calculated_value_public_id": {
                                    "description": "Public ID of the Calculated value that is tested.",
                                    "$ref": "#/components/schemas/ModelCalculatedValuePublicIdInput"
                                  }
                                },
                                "required": [
                                  "type",
                                  "calculated_value_public_id"
                                ],
                                "additionalProperties": false
                              },
                              {
                                "type": "object",
                                "properties": {
                                  "type": {
                                    "type": "string",
                                    "const": "page",
                                    "description": "What the condition tests."
                                  },
                                  "page_public_id": {
                                    "type": "string",
                                    "minLength": 1,
                                    "maxLength": 22,
                                    "pattern": "^[A-Za-z0-9_-]+$",
                                    "description": "Public ID of the page the respondent must have visited."
                                  }
                                },
                                "required": [
                                  "type",
                                  "page_public_id"
                                ],
                                "additionalProperties": false
                              },
                              {
                                "type": "object",
                                "properties": {
                                  "type": {
                                    "type": "string",
                                    "const": "ending",
                                    "description": "Matches once the respondent reaches an ending."
                                  }
                                },
                                "required": [
                                  "type"
                                ],
                                "additionalProperties": false
                              }
                            ],
                            "description": "The answer, Hidden value, Calculated value, page, or ending that is tested."
                          },
                          "operator": {
                            "description": "How the subject is compared. The allowed operators depend on the subject type.",
                            "$ref": "#/components/schemas/ModelLogicOperatorInput"
                          },
                          "value": {
                            "description": "The value to compare against: text, a number, or a list of option values. Empty for presence operators.",
                            "anyOf": [
                              {
                                "anyOf": [
                                  {
                                    "type": "string",
                                    "maxLength": 500
                                  },
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "maxItems": 100,
                                    "type": "array",
                                    "items": {
                                      "type": "string",
                                      "maxLength": 500
                                    }
                                  }
                                ]
                              },
                              {
                                "type": "null"
                              }
                            ]
                          }
                        },
                        "required": [
                          "kind",
                          "id",
                          "subject",
                          "operator"
                        ],
                        "additionalProperties": false
                      },
                      {
                        "type": "object",
                        "properties": {
                          "kind": {
                            "type": "string",
                            "const": "group",
                            "description": "Marks a group of conditions."
                          },
                          "id": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 22,
                            "pattern": "^[A-Za-z0-9_-]+$",
                            "description": "ID of this item, unique within the rule. 1-22 URL-safe characters."
                          },
                          "match": {
                            "description": "Whether all or any of the grouped conditions must match.",
                            "$ref": "#/components/schemas/ModelLogicMatchInput"
                          },
                          "conditions": {
                            "type": "array",
                            "items": {
                              "type": "object",
                              "properties": {
                                "kind": {
                                  "type": "string",
                                  "const": "condition",
                                  "description": "Marks a single condition."
                                },
                                "id": {
                                  "type": "string",
                                  "minLength": 1,
                                  "maxLength": 22,
                                  "pattern": "^[A-Za-z0-9_-]+$",
                                  "description": "ID of this item, unique within the rule. 1-22 URL-safe characters."
                                },
                                "subject": {
                                  "oneOf": [
                                    {
                                      "type": "object",
                                      "properties": {
                                        "type": {
                                          "type": "string",
                                          "const": "answer",
                                          "description": "What the condition tests."
                                        },
                                        "node_public_id": {
                                          "type": "string",
                                          "minLength": 1,
                                          "maxLength": 22,
                                          "pattern": "^[A-Za-z0-9_-]+$",
                                          "description": "Public ID of the question whose answer is tested."
                                        }
                                      },
                                      "required": [
                                        "type",
                                        "node_public_id"
                                      ],
                                      "additionalProperties": false
                                    },
                                    {
                                      "type": "object",
                                      "properties": {
                                        "type": {
                                          "type": "string",
                                          "const": "hidden_value",
                                          "description": "What the condition tests."
                                        },
                                        "key": {
                                          "description": "Key of the Hidden value that is tested.",
                                          "$ref": "#/components/schemas/ModelHiddenValueKeyInput"
                                        }
                                      },
                                      "required": [
                                        "type",
                                        "key"
                                      ],
                                      "additionalProperties": false
                                    },
                                    {
                                      "type": "object",
                                      "properties": {
                                        "type": {
                                          "type": "string",
                                          "const": "calculated_value",
                                          "description": "What the condition tests."
                                        },
                                        "calculated_value_public_id": {
                                          "description": "Public ID of the Calculated value that is tested.",
                                          "$ref": "#/components/schemas/ModelCalculatedValuePublicIdInput"
                                        }
                                      },
                                      "required": [
                                        "type",
                                        "calculated_value_public_id"
                                      ],
                                      "additionalProperties": false
                                    },
                                    {
                                      "type": "object",
                                      "properties": {
                                        "type": {
                                          "type": "string",
                                          "const": "page",
                                          "description": "What the condition tests."
                                        },
                                        "page_public_id": {
                                          "type": "string",
                                          "minLength": 1,
                                          "maxLength": 22,
                                          "pattern": "^[A-Za-z0-9_-]+$",
                                          "description": "Public ID of the page the respondent must have visited."
                                        }
                                      },
                                      "required": [
                                        "type",
                                        "page_public_id"
                                      ],
                                      "additionalProperties": false
                                    },
                                    {
                                      "type": "object",
                                      "properties": {
                                        "type": {
                                          "type": "string",
                                          "const": "ending",
                                          "description": "Matches once the respondent reaches an ending."
                                        }
                                      },
                                      "required": [
                                        "type"
                                      ],
                                      "additionalProperties": false
                                    }
                                  ],
                                  "description": "The answer, Hidden value, Calculated value, page, or ending that is tested."
                                },
                                "operator": {
                                  "description": "How the subject is compared. The allowed operators depend on the subject type.",
                                  "$ref": "#/components/schemas/ModelLogicOperatorInput"
                                },
                                "value": {
                                  "description": "The value to compare against: text, a number, or a list of option values. Empty for presence operators.",
                                  "anyOf": [
                                    {
                                      "anyOf": [
                                        {
                                          "type": "string",
                                          "maxLength": 500
                                        },
                                        {
                                          "type": "number"
                                        },
                                        {
                                          "maxItems": 100,
                                          "type": "array",
                                          "items": {
                                            "type": "string",
                                            "maxLength": 500
                                          }
                                        }
                                      ]
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ]
                                }
                              },
                              "required": [
                                "kind",
                                "id",
                                "subject",
                                "operator"
                              ],
                              "additionalProperties": false
                            },
                            "description": "The grouped conditions. Groups do not nest."
                          }
                        },
                        "required": [
                          "kind",
                          "id",
                          "match",
                          "conditions"
                        ],
                        "additionalProperties": false
                      }
                    ]
                  },
                  "description": "Conditions and condition groups."
                }
              },
              "required": [
                "match",
                "items"
              ],
              "additionalProperties": false,
              "description": "When the rule applies."
            },
            "actions": {
              "maxItems": 20,
              "type": "array",
              "items": {
                "oneOf": [
                  {
                    "type": "object",
                    "properties": {
                      "id": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 22,
                        "pattern": "^[A-Za-z0-9_-]+$",
                        "description": "ID of this item, unique within the rule. 1-22 URL-safe characters."
                      },
                      "type": {
                        "type": "string",
                        "const": "show",
                        "description": "Shows the target. A show target starts hidden until a matching rule shows it."
                      },
                      "target": {
                        "oneOf": [
                          {
                            "type": "object",
                            "properties": {
                              "kind": {
                                "type": "string",
                                "const": "node",
                                "description": "Targets one block."
                              },
                              "node_public_id": {
                                "type": "string",
                                "minLength": 1,
                                "maxLength": 22,
                                "pattern": "^[A-Za-z0-9_-]+$",
                                "description": "Public ID of the block to show or hide."
                              }
                            },
                            "required": [
                              "kind",
                              "node_public_id"
                            ],
                            "additionalProperties": false
                          },
                          {
                            "type": "object",
                            "properties": {
                              "kind": {
                                "type": "string",
                                "const": "page",
                                "description": "Targets a whole question page."
                              },
                              "page_public_id": {
                                "type": "string",
                                "minLength": 1,
                                "maxLength": 22,
                                "pattern": "^[A-Za-z0-9_-]+$",
                                "description": "Public ID of the question page to show or hide."
                              }
                            },
                            "required": [
                              "kind",
                              "page_public_id"
                            ],
                            "additionalProperties": false
                          }
                        ],
                        "description": "The block or page to show."
                      }
                    },
                    "required": [
                      "id",
                      "type",
                      "target"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "id": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 22,
                        "pattern": "^[A-Za-z0-9_-]+$",
                        "description": "ID of this item, unique within the rule. 1-22 URL-safe characters."
                      },
                      "type": {
                        "type": "string",
                        "const": "hide",
                        "description": "Hides the target."
                      },
                      "target": {
                        "oneOf": [
                          {
                            "type": "object",
                            "properties": {
                              "kind": {
                                "type": "string",
                                "const": "node",
                                "description": "Targets one block."
                              },
                              "node_public_id": {
                                "type": "string",
                                "minLength": 1,
                                "maxLength": 22,
                                "pattern": "^[A-Za-z0-9_-]+$",
                                "description": "Public ID of the block to show or hide."
                              }
                            },
                            "required": [
                              "kind",
                              "node_public_id"
                            ],
                            "additionalProperties": false
                          },
                          {
                            "type": "object",
                            "properties": {
                              "kind": {
                                "type": "string",
                                "const": "page",
                                "description": "Targets a whole question page."
                              },
                              "page_public_id": {
                                "type": "string",
                                "minLength": 1,
                                "maxLength": 22,
                                "pattern": "^[A-Za-z0-9_-]+$",
                                "description": "Public ID of the question page to show or hide."
                              }
                            },
                            "required": [
                              "kind",
                              "page_public_id"
                            ],
                            "additionalProperties": false
                          }
                        ],
                        "description": "The block or page to hide."
                      }
                    },
                    "required": [
                      "id",
                      "type",
                      "target"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "id": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 22,
                        "pattern": "^[A-Za-z0-9_-]+$",
                        "description": "ID of this item, unique within the rule. 1-22 URL-safe characters."
                      },
                      "type": {
                        "type": "string",
                        "const": "require",
                        "description": "Makes the question required."
                      },
                      "node_public_id": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 22,
                        "pattern": "^[A-Za-z0-9_-]+$",
                        "description": "Public ID of the question to require."
                      }
                    },
                    "required": [
                      "id",
                      "type",
                      "node_public_id"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "id": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 22,
                        "pattern": "^[A-Za-z0-9_-]+$",
                        "description": "ID of this item, unique within the rule. 1-22 URL-safe characters."
                      },
                      "type": {
                        "type": "string",
                        "const": "optional",
                        "description": "Makes the question optional."
                      },
                      "node_public_id": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 22,
                        "pattern": "^[A-Za-z0-9_-]+$",
                        "description": "Public ID of the question to make optional."
                      }
                    },
                    "required": [
                      "id",
                      "type",
                      "node_public_id"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "id": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 22,
                        "pattern": "^[A-Za-z0-9_-]+$",
                        "description": "ID of this item, unique within the rule. 1-22 URL-safe characters."
                      },
                      "type": {
                        "type": "string",
                        "const": "jump",
                        "description": "Skips ahead when the respondent advances. Jumps only go forward."
                      },
                      "to_page_public_id": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 22,
                        "pattern": "^[A-Za-z0-9_-]+$",
                        "description": "Public ID of a later question page or of an ending."
                      }
                    },
                    "required": [
                      "id",
                      "type",
                      "to_page_public_id"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "id": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 22,
                        "pattern": "^[A-Za-z0-9_-]+$",
                        "description": "ID of this item, unique within the rule. 1-22 URL-safe characters."
                      },
                      "type": {
                        "type": "string",
                        "const": "calculate",
                        "description": "Sets a number Calculated value from a formula."
                      },
                      "calculated_value_public_id": {
                        "description": "Public ID of the Calculated value this action updates.",
                        "$ref": "#/components/schemas/ModelCalculatedValuePublicIdInput"
                      },
                      "formula": {
                        "type": "string",
                        "maxLength": 1000,
                        "description": "Arithmetic formula over answers and Calculated values."
                      }
                    },
                    "required": [
                      "id",
                      "type",
                      "calculated_value_public_id",
                      "formula"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "id": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 22,
                        "pattern": "^[A-Za-z0-9_-]+$",
                        "description": "ID of this item, unique within the rule. 1-22 URL-safe characters."
                      },
                      "type": {
                        "type": "string",
                        "const": "redirect",
                        "description": "Redirects the respondent to a URL after an ending. Needs the Pro plan."
                      },
                      "url": {
                        "type": "string",
                        "maxLength": 1000,
                        "description": "The URL to redirect to. Pipes are allowed."
                      }
                    },
                    "required": [
                      "id",
                      "type",
                      "url"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "id": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 22,
                        "pattern": "^[A-Za-z0-9_-]+$",
                        "description": "ID of this item, unique within the rule. 1-22 URL-safe characters."
                      },
                      "type": {
                        "type": "string",
                        "const": "update_text",
                        "description": "Updates a text Calculated value."
                      },
                      "calculated_value_public_id": {
                        "description": "Public ID of the Calculated value this action updates.",
                        "$ref": "#/components/schemas/ModelCalculatedValuePublicIdInput"
                      },
                      "operation": {
                        "type": "string",
                        "enum": [
                          "replace",
                          "append",
                          "prepend"
                        ],
                        "description": "Whether the text replaces the value, is appended to it, or is prepended to it."
                      },
                      "text": {
                        "type": "string",
                        "maxLength": 1000,
                        "description": "The text to write. Pipes are allowed."
                      }
                    },
                    "required": [
                      "id",
                      "type",
                      "calculated_value_public_id",
                      "operation",
                      "text"
                    ],
                    "additionalProperties": false
                  }
                ]
              },
              "description": "What the rule does when it applies, in order."
            }
          },
          "required": [
            "public_id",
            "conditions",
            "actions"
          ],
          "additionalProperties": false
        }
      },
      "ModelPlatformMe": {
        "type": "object",
        "properties": {
          "organization": {
            "description": "The organization every call with this credential acts on.",
            "$ref": "#/components/schemas/ModelPlatformOrganization"
          },
          "member": {
            "description": "The organization member the credential belongs to.",
            "$ref": "#/components/schemas/ModelPlatformMember"
          },
          "credential": {
            "description": "How this call was authenticated.",
            "$ref": "#/components/schemas/ModelPlatformCredential"
          },
          "token": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelPlatformCredentialToken"
              },
              {
                "type": "null"
              }
            ],
            "description": "The calling Personal Access Token, or null when the credential is of another kind."
          }
        },
        "required": [
          "organization",
          "member",
          "credential",
          "token"
        ]
      },
      "ModelPlatformMember": {
        "type": "object",
        "properties": {
          "role": {
            "type": "string",
            "description": "The name of the organization role the member holds."
          },
          "permissions": {
            "description": "The permissions the role carries right now. They are resolved on every request, so a role change takes effect immediately.",
            "$ref": "#/components/schemas/ModelOrganizationResolvedPermissions"
          }
        },
        "required": [
          "role",
          "permissions"
        ]
      },
      "ModelPlatformNodeMetaActionsInput": {
        "type": "object",
        "properties": {
          "label": {
            "description": "Text of the page's primary button.",
            "type": "string"
          },
          "is_page_actions_override": {
            "description": "Whether this page overrides the theme's button behavior (back button, arrows, and alignment).",
            "default": false,
            "type": "boolean"
          },
          "show_back_button": {
            "description": "Whether the Back button is shown; applies only when the page overrides the theme.",
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ]
          },
          "back_button_label": {
            "description": "Text of the Back button.",
            "default": "Back",
            "type": "string"
          },
          "show_button_arrows": {
            "description": "Whether the buttons show directional arrows; applies only when the page overrides the theme.",
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ]
          },
          "action_button_alignment": {
            "description": "Horizontal alignment of the buttons: left, center, right, or justify; applies only when the page overrides the theme.",
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "left",
                  "center",
                  "right",
                  "justify"
                ]
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "additionalProperties": false,
        "description": "Content and settings of the page button row."
      },
      "ModelPlatformNodeMetaCheckboxChoiceInput": {
        "type": "object",
        "properties": {
          "supporting_content_column_count": {
            "description": "Number of supporting content columns under the question: 1 when the question hosts text, images, or dividers, otherwise null.",
            "anyOf": [
              {
                "type": "number",
                "const": 1
              },
              {
                "type": "null"
              }
            ]
          },
          "supporting_content_column_0_alignment": {
            "description": "Vertical alignment of the supporting content column: top, middle, or bottom.",
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "top",
                  "middle",
                  "bottom"
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "question": {
            "description": "The question text shown to respondents, as inline rich text HTML.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "select_options_data": {
            "description": "Selectable options in display order.",
            "maxItems": 1000,
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "value": {
                  "description": "Stable option value stored in answers.",
                  "type": "string"
                },
                "label": {
                  "description": "Option label shown to respondents.",
                  "type": "string"
                },
                "label_formatted": {
                  "description": "Option label as inline rich text HTML; derived from label when omitted.",
                  "type": "string"
                }
              },
              "additionalProperties": false
            }
          },
          "select_options_randomize": {
            "description": "Whether the options are shuffled for each respondent.",
            "type": "boolean"
          },
          "select_options_selection": {
            "description": "Whether respondents pick one option (single) or several (multiple).",
            "type": "string",
            "enum": [
              "single",
              "multiple"
            ]
          },
          "select_options_style": {
            "description": "Control style of the options: checkbox or radio.",
            "type": "string",
            "enum": [
              "checkbox",
              "radio"
            ]
          },
          "select_options_layout": {
            "description": "Option layout: list, bordered, or inline; applies only when is_select_options_layout_override is true.",
            "type": "string",
            "enum": [
              "list",
              "bordered",
              "inline"
            ]
          },
          "is_select_options_layout_override": {
            "description": "Whether this question overrides the theme's option layout.",
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ]
          },
          "select_options_colored": {
            "description": "Whether the options are painted with the theme's option colors; null follows the theme.",
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ]
          },
          "select_options_other_placeholder": {
            "description": "Placeholder of the free-text field shown when the Other option is selected.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "default_value": {
            "description": "Value pre-filled for respondents before they answer; null leaves the input empty.",
            "anyOf": [
              {
                "anyOf": [
                  {
                    "type": "string",
                    "maxLength": 1000
                  },
                  {
                    "maxItems": 1000,
                    "type": "array",
                    "items": {
                      "type": "string",
                      "maxLength": 1000
                    }
                  }
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "validation": {
            "type": "object",
            "properties": {
              "required": {
                "description": "Whether respondents must answer before continuing.",
                "type": "boolean"
              }
            },
            "additionalProperties": false,
            "description": "Answer validation rules. Omitting it on write makes the question required."
          }
        },
        "additionalProperties": false,
        "description": "Content and settings of a Checkboxes question."
      },
      "ModelPlatformNodeMetaCheckboxInput": {
        "type": "object",
        "properties": {
          "supporting_content_column_count": {
            "description": "Number of supporting content columns under the question: 1 when the question hosts text, images, or dividers, otherwise null.",
            "anyOf": [
              {
                "type": "number",
                "const": 1
              },
              {
                "type": "null"
              }
            ]
          },
          "supporting_content_column_0_alignment": {
            "description": "Vertical alignment of the supporting content column: top, middle, or bottom.",
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "top",
                  "middle",
                  "bottom"
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "question": {
            "description": "The question text shown to respondents, as inline rich text HTML.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "placeholder": {
            "description": "Placeholder text shown inside the empty input.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "default_value": {
            "description": "Value pre-filled for respondents before they answer; null leaves the input empty.",
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ]
          },
          "validation": {
            "type": "object",
            "properties": {
              "required": {
                "description": "Whether respondents must answer before continuing.",
                "type": "boolean"
              }
            },
            "additionalProperties": false,
            "description": "Answer validation rules. Omitting it on write makes the question required."
          }
        },
        "additionalProperties": false,
        "description": "Content and settings of a Checkbox question."
      },
      "ModelPlatformNodeMetaDatePickerInput": {
        "type": "object",
        "properties": {
          "supporting_content_column_count": {
            "description": "Number of supporting content columns under the question: 1 when the question hosts text, images, or dividers, otherwise null.",
            "anyOf": [
              {
                "type": "number",
                "const": 1
              },
              {
                "type": "null"
              }
            ]
          },
          "supporting_content_column_0_alignment": {
            "description": "Vertical alignment of the supporting content column: top, middle, or bottom.",
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "top",
                  "middle",
                  "bottom"
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "question": {
            "description": "The question text shown to respondents, as inline rich text HTML.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "placeholder": {
            "description": "Placeholder text shown inside the empty input.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "date_format": {
            "description": "Display format of dates, for example DD/MM/YYYY.",
            "type": "string",
            "enum": [
              "DD/MM/YYYY",
              "MM/DD/YYYY",
              "YYYY/MM/DD",
              "MMMM D, YYYY",
              "DD MMMM YYYY"
            ]
          },
          "date_range": {
            "type": "object",
            "properties": {
              "min": {
                "description": "Earliest selectable date, or null.",
                "anyOf": [
                  {
                    "type": "string",
                    "format": "date-time",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "max": {
                "description": "Latest selectable date, or null.",
                "anyOf": [
                  {
                    "type": "string",
                    "format": "date-time",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            },
            "additionalProperties": false,
            "description": "Earliest and latest selectable dates as ISO 8601 timestamps; null leaves a bound open."
          },
          "default_value": {
            "description": "Value pre-filled for respondents before they answer; null leaves the input empty.",
            "anyOf": [
              {
                "oneOf": [
                  {
                    "type": "object",
                    "properties": {
                      "type": {
                        "type": "string",
                        "const": "static",
                        "description": "static for a fixed value, relative for the moment the respondent opens the form."
                      },
                      "value": {
                        "description": "The fixed value used when type is static.",
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
                      }
                    },
                    "required": [
                      "type"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "type": {
                        "type": "string",
                        "const": "relative",
                        "description": "static for a fixed value, relative for the moment the respondent opens the form."
                      }
                    },
                    "required": [
                      "type"
                    ],
                    "additionalProperties": false
                  }
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "validation": {
            "type": "object",
            "properties": {
              "required": {
                "description": "Whether respondents must answer before continuing.",
                "type": "boolean"
              }
            },
            "additionalProperties": false,
            "description": "Answer validation rules. Omitting it on write makes the question required."
          }
        },
        "additionalProperties": false,
        "description": "Content and settings of a Date question."
      },
      "ModelPlatformNodeMetaDateRangePickerInput": {
        "type": "object",
        "properties": {
          "supporting_content_column_count": {
            "description": "Number of supporting content columns under the question: 1 when the question hosts text, images, or dividers, otherwise null.",
            "anyOf": [
              {
                "type": "number",
                "const": 1
              },
              {
                "type": "null"
              }
            ]
          },
          "supporting_content_column_0_alignment": {
            "description": "Vertical alignment of the supporting content column: top, middle, or bottom.",
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "top",
                  "middle",
                  "bottom"
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "question": {
            "description": "The question text shown to respondents, as inline rich text HTML.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "placeholder": {
            "description": "Placeholder text shown inside the empty input.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "date_format": {
            "description": "Display format of dates, for example DD/MM/YYYY.",
            "type": "string",
            "enum": [
              "DD/MM/YYYY",
              "MM/DD/YYYY",
              "YYYY/MM/DD",
              "MMMM D, YYYY",
              "DD MMMM YYYY"
            ]
          },
          "date_range": {
            "type": "object",
            "properties": {
              "min": {
                "description": "Earliest selectable date, or null.",
                "anyOf": [
                  {
                    "type": "string",
                    "format": "date-time",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "max": {
                "description": "Latest selectable date, or null.",
                "anyOf": [
                  {
                    "type": "string",
                    "format": "date-time",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            },
            "additionalProperties": false,
            "description": "Earliest and latest selectable dates as ISO 8601 timestamps; null leaves a bound open."
          },
          "validation": {
            "type": "object",
            "properties": {
              "required": {
                "description": "Whether respondents must answer before continuing.",
                "type": "boolean"
              }
            },
            "additionalProperties": false,
            "description": "Answer validation rules. Omitting it on write makes the question required."
          }
        },
        "additionalProperties": false,
        "description": "Content and settings of a Date Range question."
      },
      "ModelPlatformNodeMetaDateTimePickerInput": {
        "type": "object",
        "properties": {
          "supporting_content_column_count": {
            "description": "Number of supporting content columns under the question: 1 when the question hosts text, images, or dividers, otherwise null.",
            "anyOf": [
              {
                "type": "number",
                "const": 1
              },
              {
                "type": "null"
              }
            ]
          },
          "supporting_content_column_0_alignment": {
            "description": "Vertical alignment of the supporting content column: top, middle, or bottom.",
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "top",
                  "middle",
                  "bottom"
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "question": {
            "description": "The question text shown to respondents, as inline rich text HTML.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "placeholder": {
            "description": "Placeholder text shown inside the empty input.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "date_format": {
            "description": "Display format of dates, for example DD/MM/YYYY.",
            "type": "string",
            "enum": [
              "DD/MM/YYYY",
              "MM/DD/YYYY",
              "YYYY/MM/DD",
              "MMMM D, YYYY",
              "DD MMMM YYYY"
            ]
          },
          "date_range": {
            "type": "object",
            "properties": {
              "min": {
                "description": "Earliest selectable date, or null.",
                "anyOf": [
                  {
                    "type": "string",
                    "format": "date-time",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "max": {
                "description": "Latest selectable date, or null.",
                "anyOf": [
                  {
                    "type": "string",
                    "format": "date-time",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            },
            "additionalProperties": false,
            "description": "Earliest and latest selectable dates as ISO 8601 timestamps; null leaves a bound open."
          },
          "time_format": {
            "description": "Display format of times: HH:mm or hh:mm A.",
            "type": "string",
            "enum": [
              "HH:mm",
              "hh:mm A"
            ]
          },
          "time_range": {
            "type": "object",
            "properties": {
              "min": {
                "description": "Earliest selectable time, or null.",
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "max": {
                "description": "Latest selectable time, or null.",
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            },
            "additionalProperties": false,
            "description": "Earliest and latest selectable times in HH:mm; null leaves a bound open."
          },
          "time_minute_step": {
            "description": "Minute increment offered by the time picker: 1, 5, 10, 15, 30, or 60.",
            "type": "string",
            "enum": [
              "1",
              "5",
              "10",
              "15",
              "30",
              "60"
            ]
          },
          "default_value": {
            "description": "Value pre-filled for respondents before they answer; null leaves the input empty.",
            "anyOf": [
              {
                "oneOf": [
                  {
                    "type": "object",
                    "properties": {
                      "type": {
                        "type": "string",
                        "const": "static",
                        "description": "static for a fixed value, relative for the moment the respondent opens the form."
                      },
                      "value": {
                        "description": "The fixed value used when type is static.",
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
                      }
                    },
                    "required": [
                      "type"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "type": {
                        "type": "string",
                        "const": "relative",
                        "description": "static for a fixed value, relative for the moment the respondent opens the form."
                      }
                    },
                    "required": [
                      "type"
                    ],
                    "additionalProperties": false
                  }
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "validation": {
            "type": "object",
            "properties": {
              "required": {
                "description": "Whether respondents must answer before continuing.",
                "type": "boolean"
              }
            },
            "additionalProperties": false,
            "description": "Answer validation rules. Omitting it on write makes the question required."
          }
        },
        "additionalProperties": false,
        "description": "Content and settings of a Date Time question."
      },
      "ModelPlatformNodeMetaDividerInput": {
        "type": "object",
        "propertyNames": {
          "type": "string"
        },
        "additionalProperties": {
          "not": {}
        },
        "description": "A Divider block has no settings; the meta must be an empty object."
      },
      "ModelPlatformNodeMetaDropdownInput": {
        "type": "object",
        "properties": {
          "supporting_content_column_count": {
            "description": "Number of supporting content columns under the question: 1 when the question hosts text, images, or dividers, otherwise null.",
            "anyOf": [
              {
                "type": "number",
                "const": 1
              },
              {
                "type": "null"
              }
            ]
          },
          "supporting_content_column_0_alignment": {
            "description": "Vertical alignment of the supporting content column: top, middle, or bottom.",
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "top",
                  "middle",
                  "bottom"
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "question": {
            "description": "The question text shown to respondents, as inline rich text HTML.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "placeholder": {
            "description": "Placeholder text shown inside the empty input.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "select_options_data": {
            "description": "Selectable options in display order.",
            "maxItems": 1000,
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "value": {
                  "description": "Stable option value stored in answers.",
                  "type": "string"
                },
                "label": {
                  "description": "Option label shown to respondents.",
                  "type": "string"
                },
                "label_formatted": {
                  "description": "Option label as inline rich text HTML; derived from label when omitted.",
                  "type": "string"
                }
              },
              "additionalProperties": false
            }
          },
          "select_options_randomize": {
            "description": "Whether the options are shuffled for each respondent.",
            "type": "boolean"
          },
          "select_options_other_placeholder": {
            "description": "Placeholder of the free-text field shown when the Other option is selected.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "default_value": {
            "description": "Value pre-filled for respondents before they answer; null leaves the input empty.",
            "anyOf": [
              {
                "type": "string",
                "maxLength": 1000
              },
              {
                "type": "null"
              }
            ]
          },
          "validation": {
            "type": "object",
            "properties": {
              "required": {
                "description": "Whether respondents must answer before continuing.",
                "type": "boolean"
              }
            },
            "additionalProperties": false,
            "description": "Answer validation rules. Omitting it on write makes the question required."
          }
        },
        "additionalProperties": false,
        "description": "Content and settings of a Dropdown question."
      },
      "ModelPlatformNodeMetaDropdownMultiselectInput": {
        "type": "object",
        "properties": {
          "supporting_content_column_count": {
            "description": "Number of supporting content columns under the question: 1 when the question hosts text, images, or dividers, otherwise null.",
            "anyOf": [
              {
                "type": "number",
                "const": 1
              },
              {
                "type": "null"
              }
            ]
          },
          "supporting_content_column_0_alignment": {
            "description": "Vertical alignment of the supporting content column: top, middle, or bottom.",
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "top",
                  "middle",
                  "bottom"
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "question": {
            "description": "The question text shown to respondents, as inline rich text HTML.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "placeholder": {
            "description": "Placeholder text shown inside the empty input.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "select_options_data": {
            "description": "Selectable options in display order.",
            "maxItems": 1000,
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "value": {
                  "description": "Stable option value stored in answers.",
                  "type": "string"
                },
                "label": {
                  "description": "Option label shown to respondents.",
                  "type": "string"
                },
                "label_formatted": {
                  "description": "Option label as inline rich text HTML; derived from label when omitted.",
                  "type": "string"
                }
              },
              "additionalProperties": false
            }
          },
          "select_options_randomize": {
            "description": "Whether the options are shuffled for each respondent.",
            "type": "boolean"
          },
          "select_options_other_placeholder": {
            "description": "Placeholder of the free-text field shown when the Other option is selected.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "default_value": {
            "description": "Value pre-filled for respondents before they answer; null leaves the input empty.",
            "anyOf": [
              {
                "maxItems": 1000,
                "type": "array",
                "items": {
                  "type": "string",
                  "maxLength": 1000
                }
              },
              {
                "type": "null"
              }
            ]
          },
          "validation": {
            "type": "object",
            "properties": {
              "required": {
                "description": "Whether respondents must answer before continuing.",
                "type": "boolean"
              }
            },
            "additionalProperties": false,
            "description": "Answer validation rules. Omitting it on write makes the question required."
          }
        },
        "additionalProperties": false,
        "description": "Content and settings of a Multiselect question."
      },
      "ModelPlatformNodeMetaFileUploadInput": {
        "type": "object",
        "properties": {
          "supporting_content_column_count": {
            "description": "Number of supporting content columns under the question: 1 when the question hosts text, images, or dividers, otherwise null.",
            "anyOf": [
              {
                "type": "number",
                "const": 1
              },
              {
                "type": "null"
              }
            ]
          },
          "supporting_content_column_0_alignment": {
            "description": "Vertical alignment of the supporting content column: top, middle, or bottom.",
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "top",
                  "middle",
                  "bottom"
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "question": {
            "description": "The question text shown to respondents, as inline rich text HTML.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "file_upload_accepted_categories": {
            "description": "Accepted file categories; null accepts every supported category.",
            "anyOf": [
              {
                "maxItems": 5,
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/ModelSubmissionFileCategoryInput"
                }
              },
              {
                "type": "null"
              }
            ]
          },
          "file_upload_max_files": {
            "description": "Maximum number of files per answer; null uses the default limit.",
            "anyOf": [
              {
                "type": "integer",
                "minimum": 1,
                "maximum": 20
              },
              {
                "type": "null"
              }
            ]
          },
          "file_upload_max_file_size_mb": {
            "description": "Maximum size per file in megabytes; null uses the default limit.",
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ]
          },
          "validation": {
            "type": "object",
            "properties": {
              "required": {
                "description": "Whether respondents must answer before continuing.",
                "type": "boolean"
              }
            },
            "additionalProperties": false,
            "description": "Answer validation rules. Omitting it on write makes the question required."
          }
        },
        "additionalProperties": false,
        "description": "Content and settings of a File Upload question."
      },
      "ModelPlatformNodeMetaFormTitleInput": {
        "type": "object",
        "properties": {
          "use_page_name": {
            "description": "Whether the title shows the page name instead of the custom content.",
            "default": true,
            "type": "boolean"
          },
          "content": {
            "description": "Custom title text shown when use_page_name is false.",
            "anyOf": [
              {
                "type": "string",
                "maxLength": 255
              },
              {
                "type": "null"
              }
            ]
          },
          "level": {
            "description": "Heading level of the title: h1, h2, or h3.",
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "h1",
                  "h2",
                  "h3"
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "align": {
            "description": "Horizontal alignment of the title: left, center, or right.",
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "left",
                  "center",
                  "right"
                ]
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "additionalProperties": false,
        "description": "Settings of the Form Title block."
      },
      "ModelPlatformNodeMetaImageInput": {
        "type": "object",
        "properties": {
          "image_url": {
            "description": "Public http or https URL of the image.",
            "anyOf": [
              {
                "type": "string",
                "maxLength": 1000,
                "format": "uri"
              },
              {
                "type": "null"
              }
            ]
          },
          "image_caption": {
            "description": "Caption rendered under the image, as inline rich text HTML.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "image_alignment": {
            "description": "Horizontal alignment of the image: left, center, or right.",
            "type": "string",
            "enum": [
              "left",
              "center",
              "right"
            ]
          },
          "image_width": {
            "description": "Rendered width in pixels; null keeps the natural size.",
            "anyOf": [
              {
                "type": "integer",
                "exclusiveMinimum": 0,
                "maximum": 9007199254740991
              },
              {
                "type": "null"
              }
            ]
          },
          "image_height": {
            "description": "Rendered height in pixels; null keeps the natural size.",
            "anyOf": [
              {
                "type": "integer",
                "exclusiveMinimum": 0,
                "maximum": 9007199254740991
              },
              {
                "type": "null"
              }
            ]
          },
          "image_full_width": {
            "description": "Whether the image stretches to the full form width.",
            "type": "boolean"
          }
        },
        "additionalProperties": false,
        "description": "Content and settings of an Image block."
      },
      "ModelPlatformNodeMetaLayoutRowInput": {
        "type": "object",
        "properties": {
          "column_count": {
            "description": "Number of columns in the layout row, from 1 to 3.",
            "type": "integer",
            "minimum": 1,
            "maximum": 3
          },
          "column_0_alignment": {
            "description": "Vertical alignment of the first column: top, middle, or bottom.",
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "top",
                  "middle",
                  "bottom"
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "column_1_alignment": {
            "description": "Vertical alignment of the second column: top, middle, or bottom.",
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "top",
                  "middle",
                  "bottom"
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "column_2_alignment": {
            "description": "Vertical alignment of the third column: top, middle, or bottom.",
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "top",
                  "middle",
                  "bottom"
                ]
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "additionalProperties": false,
        "description": "Settings of a Layout Row that places blocks side by side."
      },
      "ModelPlatformNodeMetaMatrixInput": {
        "type": "object",
        "properties": {
          "supporting_content_column_count": {
            "description": "Number of supporting content columns under the question: 1 when the question hosts text, images, or dividers, otherwise null.",
            "anyOf": [
              {
                "type": "number",
                "const": 1
              },
              {
                "type": "null"
              }
            ]
          },
          "supporting_content_column_0_alignment": {
            "description": "Vertical alignment of the supporting content column: top, middle, or bottom.",
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "top",
                  "middle",
                  "bottom"
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "question": {
            "description": "The question text shown to respondents, as inline rich text HTML.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "select_options_data": {
            "maxItems": 30,
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "value": {
                  "description": "Stable option value stored in answers.",
                  "type": "string"
                },
                "label": {
                  "description": "Option label shown to respondents.",
                  "type": "string"
                },
                "label_formatted": {
                  "description": "Option label as inline rich text HTML; derived from label when omitted.",
                  "type": "string"
                }
              },
              "additionalProperties": false
            },
            "description": "Selectable options in display order."
          },
          "select_options_matrix_rows": {
            "maxItems": 50,
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "value": {
                  "description": "Stable option value stored in answers.",
                  "type": "string"
                },
                "label": {
                  "description": "Option label shown to respondents.",
                  "type": "string"
                },
                "label_formatted": {
                  "description": "Option label as inline rich text HTML; derived from label when omitted.",
                  "type": "string"
                }
              },
              "additionalProperties": false
            },
            "description": "Matrix rows in display order; the columns come from select_options_data."
          },
          "validation": {
            "type": "object",
            "properties": {
              "required": {
                "description": "Whether respondents must answer before continuing.",
                "type": "boolean"
              }
            },
            "additionalProperties": false,
            "description": "Answer validation rules. Omitting it on write makes the question required."
          }
        },
        "additionalProperties": false,
        "description": "Content and settings of a Matrix question."
      },
      "ModelPlatformNodeMetaMediaInput": {
        "type": "object",
        "properties": {
          "media_url": {
            "description": "Public http or https URL of the video, audio, or post to embed.",
            "anyOf": [
              {
                "type": "string",
                "maxLength": 1000,
                "format": "uri"
              },
              {
                "type": "null"
              }
            ]
          },
          "media_embed": {
            "description": "Provider embed the server resolves from media_url (provider, kind, and IDs). Read-only: ignored on write and recomputed from media_url.",
            "readOnly": true,
            "anyOf": [
              {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "number"
                    },
                    {
                      "type": "boolean"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              {
                "type": "null"
              }
            ]
          },
          "media_caption": {
            "description": "Caption shown under the embed, as inline rich text HTML.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "media_alignment": {
            "description": "Horizontal alignment of the embed: left, center, or right.",
            "type": "string",
            "enum": [
              "left",
              "center",
              "right"
            ]
          },
          "media_width": {
            "description": "Rendered width in pixels when the embed is not full width.",
            "anyOf": [
              {
                "type": "integer",
                "exclusiveMinimum": 0,
                "maximum": 4096
              },
              {
                "type": "null"
              }
            ]
          },
          "media_full_width": {
            "description": "Whether the embed stretches to the full form width.",
            "default": true,
            "type": "boolean"
          }
        },
        "additionalProperties": false,
        "description": "Content and settings of a Media block."
      },
      "ModelPlatformNodeMetaMultipleChoiceInput": {
        "type": "object",
        "properties": {
          "supporting_content_column_count": {
            "description": "Number of supporting content columns under the question: 1 when the question hosts text, images, or dividers, otherwise null.",
            "anyOf": [
              {
                "type": "number",
                "const": 1
              },
              {
                "type": "null"
              }
            ]
          },
          "supporting_content_column_0_alignment": {
            "description": "Vertical alignment of the supporting content column: top, middle, or bottom.",
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "top",
                  "middle",
                  "bottom"
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "question": {
            "description": "The question text shown to respondents, as inline rich text HTML.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "select_options_data": {
            "description": "Selectable options in display order.",
            "maxItems": 1000,
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "value": {
                  "description": "Stable option value stored in answers.",
                  "type": "string"
                },
                "label": {
                  "description": "Option label shown to respondents.",
                  "type": "string"
                },
                "label_formatted": {
                  "description": "Option label as inline rich text HTML; derived from label when omitted.",
                  "type": "string"
                }
              },
              "additionalProperties": false
            }
          },
          "select_options_randomize": {
            "description": "Whether the options are shuffled for each respondent.",
            "type": "boolean"
          },
          "select_options_selection": {
            "description": "Whether respondents pick one option (single) or several (multiple).",
            "type": "string",
            "enum": [
              "single",
              "multiple"
            ]
          },
          "select_options_layout": {
            "description": "Option layout: list, bordered, or inline; applies only when is_select_options_layout_override is true.",
            "type": "string",
            "enum": [
              "list",
              "bordered",
              "inline"
            ]
          },
          "is_select_options_layout_override": {
            "description": "Whether this question overrides the theme's option layout.",
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ]
          },
          "select_options_colored": {
            "description": "Whether the options are painted with the theme's option colors; null follows the theme.",
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ]
          },
          "select_options_other_placeholder": {
            "description": "Placeholder of the free-text field shown when the Other option is selected.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "multiple_choice_variant": {
            "description": "Key shown before each option: number or alphabet.",
            "type": "string",
            "enum": [
              "number",
              "alphabet"
            ]
          },
          "default_value": {
            "description": "Value pre-filled for respondents before they answer; null leaves the input empty.",
            "anyOf": [
              {
                "anyOf": [
                  {
                    "type": "string",
                    "maxLength": 1000
                  },
                  {
                    "maxItems": 1000,
                    "type": "array",
                    "items": {
                      "type": "string",
                      "maxLength": 1000
                    }
                  }
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "validation": {
            "type": "object",
            "properties": {
              "required": {
                "description": "Whether respondents must answer before continuing.",
                "type": "boolean"
              }
            },
            "additionalProperties": false,
            "description": "Answer validation rules. Omitting it on write makes the question required."
          }
        },
        "additionalProperties": false,
        "description": "Content and settings of a Multiple Choice question."
      },
      "ModelPlatformNodeMetaNpsInput": {
        "type": "object",
        "properties": {
          "supporting_content_column_count": {
            "description": "Number of supporting content columns under the question: 1 when the question hosts text, images, or dividers, otherwise null.",
            "anyOf": [
              {
                "type": "number",
                "const": 1
              },
              {
                "type": "null"
              }
            ]
          },
          "supporting_content_column_0_alignment": {
            "description": "Vertical alignment of the supporting content column: top, middle, or bottom.",
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "top",
                  "middle",
                  "bottom"
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "question": {
            "description": "The question text shown to respondents, as inline rich text HTML.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "rating_reverse": {
            "description": "Whether the scale is displayed in descending order.",
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ]
          },
          "nps_display": {
            "description": "Display mode of the fixed 0 to 10 NPS scale: numbers or smileys.",
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "numbers",
                  "smileys"
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "nps_colors": {
            "description": "Whether NPS score groups use distinct colors.",
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ]
          },
          "nps_legend": {
            "description": "Whether the detractor, passive, and promoter legend is shown.",
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ]
          },
          "nps_legend_detractors": {
            "description": "Label for scores from 0 to 6.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "nps_legend_passives": {
            "description": "Label for scores from 7 to 8.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "nps_legend_promoters": {
            "description": "Label for scores from 9 to 10.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "default_value": {
            "description": "Value pre-filled for respondents before they answer; null leaves the input empty.",
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ]
          },
          "validation": {
            "type": "object",
            "properties": {
              "required": {
                "description": "Whether respondents must answer before continuing.",
                "type": "boolean"
              }
            },
            "additionalProperties": false,
            "description": "Answer validation rules. Omitting it on write makes the question required."
          }
        },
        "additionalProperties": false,
        "description": "Content and settings of a Net Promoter Score question."
      },
      "ModelPlatformNodeMetaNumberInputInput": {
        "type": "object",
        "properties": {
          "supporting_content_column_count": {
            "description": "Number of supporting content columns under the question: 1 when the question hosts text, images, or dividers, otherwise null.",
            "anyOf": [
              {
                "type": "number",
                "const": 1
              },
              {
                "type": "null"
              }
            ]
          },
          "supporting_content_column_0_alignment": {
            "description": "Vertical alignment of the supporting content column: top, middle, or bottom.",
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "top",
                  "middle",
                  "bottom"
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "question": {
            "description": "The question text shown to respondents, as inline rich text HTML.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "placeholder": {
            "description": "Placeholder text shown inside the empty input.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "number_style": {
            "description": "How the number is entered: a plain field or a stepper with buttons.",
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "classic",
                  "stepper"
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "number_button_icon": {
            "description": "Icons on the stepper buttons.",
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "chevrons",
                  "plus_minus"
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "number_minmax": {
            "description": "Accepted range, or null for any number.",
            "anyOf": [
              {
                "type": "object",
                "properties": {
                  "min": {
                    "description": "Smallest accepted number, or null for no minimum.",
                    "anyOf": [
                      {
                        "type": "number",
                        "minimum": -1000000000000,
                        "maximum": 1000000000000
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "max": {
                    "description": "Largest accepted number, or null for no maximum.",
                    "anyOf": [
                      {
                        "type": "number",
                        "minimum": -1000000000000,
                        "maximum": 1000000000000
                      },
                      {
                        "type": "null"
                      }
                    ]
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "null"
              }
            ]
          },
          "number_step": {
            "description": "Increment of the stepper buttons, or null for 1.",
            "anyOf": [
              {
                "type": "number",
                "minimum": 0.0001,
                "maximum": 1000000000000
              },
              {
                "type": "null"
              }
            ]
          },
          "number_whole_only": {
            "description": "Whether only whole numbers are accepted.",
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ]
          },
          "default_value": {
            "description": "Value pre-filled for respondents before they answer; null leaves the input empty.",
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ]
          },
          "validation": {
            "type": "object",
            "properties": {
              "required": {
                "description": "Whether respondents must answer before continuing.",
                "type": "boolean"
              }
            },
            "additionalProperties": false,
            "description": "Answer validation rules. Omitting it on write makes the question required."
          }
        },
        "additionalProperties": false,
        "description": "Content and settings of a Number question."
      },
      "ModelPlatformNodeMetaPhoneNumberInputInput": {
        "type": "object",
        "properties": {
          "supporting_content_column_count": {
            "description": "Number of supporting content columns under the question: 1 when the question hosts text, images, or dividers, otherwise null.",
            "anyOf": [
              {
                "type": "number",
                "const": 1
              },
              {
                "type": "null"
              }
            ]
          },
          "supporting_content_column_0_alignment": {
            "description": "Vertical alignment of the supporting content column: top, middle, or bottom.",
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "top",
                  "middle",
                  "bottom"
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "question": {
            "description": "The question text shown to respondents, as inline rich text HTML.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "placeholder": {
            "description": "Placeholder text shown inside the empty input.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "default_value": {
            "description": "Value pre-filled for respondents before they answer; null leaves the input empty.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "validation": {
            "type": "object",
            "properties": {
              "required": {
                "description": "Whether respondents must answer before continuing.",
                "type": "boolean"
              }
            },
            "additionalProperties": false,
            "description": "Answer validation rules. Omitting it on write makes the question required."
          }
        },
        "additionalProperties": false,
        "description": "Content and settings of a Phone question."
      },
      "ModelPlatformNodeMetaProgressBarInput": {
        "type": "object",
        "properties": {
          "progress_bar_style": {
            "description": "How progress is drawn.",
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "bar",
                  "segments",
                  "bullets"
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "progress_bar_position": {
            "description": "Where the bar sits on the page.",
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "top",
                  "bottom"
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "progress_bar_animated": {
            "description": "Whether the bar animates between pages.",
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "additionalProperties": false,
        "description": "Content and settings of a Progress Bar block."
      },
      "ModelPlatformNodeMetaRankingInput": {
        "type": "object",
        "properties": {
          "supporting_content_column_count": {
            "description": "Number of supporting content columns under the question: 1 when the question hosts text, images, or dividers, otherwise null.",
            "anyOf": [
              {
                "type": "number",
                "const": 1
              },
              {
                "type": "null"
              }
            ]
          },
          "supporting_content_column_0_alignment": {
            "description": "Vertical alignment of the supporting content column: top, middle, or bottom.",
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "top",
                  "middle",
                  "bottom"
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "question": {
            "description": "The question text shown to respondents, as inline rich text HTML.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "select_options_data": {
            "maxItems": 1000,
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "value": {
                  "description": "Stable option value stored in answers.",
                  "type": "string"
                },
                "label": {
                  "description": "Option label shown to respondents.",
                  "type": "string"
                },
                "label_formatted": {
                  "description": "Option label as inline rich text HTML; derived from label when omitted.",
                  "type": "string"
                }
              },
              "additionalProperties": false
            },
            "description": "Selectable options in display order."
          },
          "select_options_randomize": {
            "description": "Whether the options are shuffled for each respondent.",
            "type": "boolean"
          },
          "select_options_layout": {
            "description": "Option layout: list, bordered, or inline; applies only when is_select_options_layout_override is true.",
            "type": "string",
            "enum": [
              "list",
              "bordered",
              "inline"
            ]
          },
          "is_select_options_layout_override": {
            "description": "Whether this question overrides the theme's option layout.",
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ]
          },
          "select_options_colored": {
            "description": "Whether the options are painted with the theme's option colors; null follows the theme.",
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ]
          },
          "validation": {
            "type": "object",
            "properties": {
              "required": {
                "description": "Whether respondents must answer before continuing.",
                "type": "boolean"
              }
            },
            "additionalProperties": false,
            "description": "Answer validation rules. Omitting it on write makes the question required."
          }
        },
        "additionalProperties": false,
        "description": "Content and settings of a Ranking question."
      },
      "ModelPlatformNodeMetaRatingInput": {
        "type": "object",
        "properties": {
          "supporting_content_column_count": {
            "description": "Number of supporting content columns under the question: 1 when the question hosts text, images, or dividers, otherwise null.",
            "anyOf": [
              {
                "type": "number",
                "const": 1
              },
              {
                "type": "null"
              }
            ]
          },
          "supporting_content_column_0_alignment": {
            "description": "Vertical alignment of the supporting content column: top, middle, or bottom.",
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "top",
                  "middle",
                  "bottom"
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "question": {
            "description": "The question text shown to respondents, as inline rich text HTML.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "rating_allow_half": {
            "description": "Whether half steps can be selected.",
            "default": false,
            "type": "boolean"
          },
          "rating_max": {
            "description": "Number of stars on the Rating question.",
            "type": "number",
            "minimum": 1,
            "maximum": 10
          },
          "default_value": {
            "description": "Value pre-filled for respondents before they answer; null leaves the input empty.",
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ]
          },
          "validation": {
            "type": "object",
            "properties": {
              "required": {
                "description": "Whether respondents must answer before continuing.",
                "type": "boolean"
              }
            },
            "additionalProperties": false,
            "description": "Answer validation rules. Omitting it on write makes the question required."
          }
        },
        "additionalProperties": false,
        "description": "Content and settings of a Rating question."
      },
      "ModelPlatformNodeMetaRatingNumberInput": {
        "type": "object",
        "properties": {
          "supporting_content_column_count": {
            "description": "Number of supporting content columns under the question: 1 when the question hosts text, images, or dividers, otherwise null.",
            "anyOf": [
              {
                "type": "number",
                "const": 1
              },
              {
                "type": "null"
              }
            ]
          },
          "supporting_content_column_0_alignment": {
            "description": "Vertical alignment of the supporting content column: top, middle, or bottom.",
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "top",
                  "middle",
                  "bottom"
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "question": {
            "description": "The question text shown to respondents, as inline rich text HTML.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "rating_start": {
            "description": "Lowest selectable Linear Scale value.",
            "anyOf": [
              {
                "type": "number",
                "minimum": -10,
                "maximum": 10
              },
              {
                "type": "null"
              }
            ]
          },
          "rating_max": {
            "description": "Highest selectable Linear Scale value.",
            "type": "number",
            "minimum": -10,
            "maximum": 10
          },
          "rating_reverse": {
            "description": "Whether the scale is displayed in descending order.",
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ]
          },
          "rating_labels": {
            "description": "Whether the endpoint labels are shown.",
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ]
          },
          "rating_label_low": {
            "description": "Label for the lowest scale value.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "rating_label_high": {
            "description": "Label for the highest scale value.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "default_value": {
            "description": "Value pre-filled for respondents before they answer; null leaves the input empty.",
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ]
          },
          "validation": {
            "type": "object",
            "properties": {
              "required": {
                "description": "Whether respondents must answer before continuing.",
                "type": "boolean"
              }
            },
            "additionalProperties": false,
            "description": "Answer validation rules. Omitting it on write makes the question required."
          }
        },
        "additionalProperties": false,
        "description": "Content and settings of a Linear Scale question."
      },
      "ModelPlatformNodeMetaSliderInput": {
        "type": "object",
        "properties": {
          "supporting_content_column_count": {
            "description": "Number of supporting content columns under the question: 1 when the question hosts text, images, or dividers, otherwise null.",
            "anyOf": [
              {
                "type": "number",
                "const": 1
              },
              {
                "type": "null"
              }
            ]
          },
          "supporting_content_column_0_alignment": {
            "description": "Vertical alignment of the supporting content column: top, middle, or bottom.",
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "top",
                  "middle",
                  "bottom"
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "question": {
            "description": "The question text shown to respondents, as inline rich text HTML.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "slider_step": {
            "description": "Increment between selectable values.",
            "type": "number",
            "minimum": 0.0001,
            "maximum": 100
          },
          "slider_minmax": {
            "type": "object",
            "properties": {
              "min": {
                "description": "Lowest selectable value.",
                "type": "number",
                "minimum": -1000,
                "maximum": 1000
              },
              "max": {
                "description": "Highest selectable value.",
                "type": "number",
                "minimum": -1000,
                "maximum": 1000
              }
            },
            "additionalProperties": false,
            "description": "Lowest and highest selectable values."
          },
          "slider_show_value": {
            "description": "When the current value is displayed: none, hover, or always.",
            "type": "string",
            "enum": [
              "none",
              "hover",
              "always"
            ]
          },
          "default_value": {
            "description": "Value pre-filled for respondents before they answer; null leaves the input empty.",
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ]
          },
          "validation": {
            "type": "object",
            "properties": {
              "required": {
                "description": "Whether respondents must answer before continuing.",
                "type": "boolean"
              }
            },
            "additionalProperties": false,
            "description": "Answer validation rules. Omitting it on write makes the question required."
          }
        },
        "additionalProperties": false,
        "description": "Content and settings of a Slider question."
      },
      "ModelPlatformNodeMetaSwitchInput": {
        "type": "object",
        "properties": {
          "supporting_content_column_count": {
            "description": "Number of supporting content columns under the question: 1 when the question hosts text, images, or dividers, otherwise null.",
            "anyOf": [
              {
                "type": "number",
                "const": 1
              },
              {
                "type": "null"
              }
            ]
          },
          "supporting_content_column_0_alignment": {
            "description": "Vertical alignment of the supporting content column: top, middle, or bottom.",
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "top",
                  "middle",
                  "bottom"
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "question": {
            "description": "The question text shown to respondents, as inline rich text HTML.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "placeholder": {
            "description": "Placeholder text shown inside the empty input.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "default_value": {
            "description": "Value pre-filled for respondents before they answer; null leaves the input empty.",
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ]
          },
          "validation": {
            "type": "object",
            "properties": {
              "required": {
                "description": "Whether respondents must answer before continuing.",
                "type": "boolean"
              }
            },
            "additionalProperties": false,
            "description": "Answer validation rules. Omitting it on write makes the question required."
          }
        },
        "additionalProperties": false,
        "description": "Content and settings of a Switch question."
      },
      "ModelPlatformNodeMetaTextInput": {
        "type": "object",
        "properties": {
          "content": {
            "description": "Block rich text HTML rendered as the text block.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "additionalProperties": false,
        "description": "Content of a Text block."
      },
      "ModelPlatformNodeMetaTextInputEmailInput": {
        "type": "object",
        "properties": {
          "supporting_content_column_count": {
            "description": "Number of supporting content columns under the question: 1 when the question hosts text, images, or dividers, otherwise null.",
            "anyOf": [
              {
                "type": "number",
                "const": 1
              },
              {
                "type": "null"
              }
            ]
          },
          "supporting_content_column_0_alignment": {
            "description": "Vertical alignment of the supporting content column: top, middle, or bottom.",
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "top",
                  "middle",
                  "bottom"
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "question": {
            "description": "The question text shown to respondents, as inline rich text HTML.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "placeholder": {
            "description": "Placeholder text shown inside the empty input.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "default_value": {
            "description": "Value pre-filled for respondents before they answer; null leaves the input empty.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "validation": {
            "type": "object",
            "properties": {
              "required": {
                "description": "Whether respondents must answer before continuing.",
                "type": "boolean"
              }
            },
            "additionalProperties": false,
            "description": "Answer validation rules. Omitting it on write makes the question required."
          }
        },
        "additionalProperties": false,
        "description": "Content and settings of an Email question."
      },
      "ModelPlatformNodeMetaTextInputLinkInput": {
        "type": "object",
        "properties": {
          "supporting_content_column_count": {
            "description": "Number of supporting content columns under the question: 1 when the question hosts text, images, or dividers, otherwise null.",
            "anyOf": [
              {
                "type": "number",
                "const": 1
              },
              {
                "type": "null"
              }
            ]
          },
          "supporting_content_column_0_alignment": {
            "description": "Vertical alignment of the supporting content column: top, middle, or bottom.",
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "top",
                  "middle",
                  "bottom"
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "question": {
            "description": "The question text shown to respondents, as inline rich text HTML.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "placeholder": {
            "description": "Placeholder text shown inside the empty input.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "default_value": {
            "description": "Value pre-filled for respondents before they answer; null leaves the input empty.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "validation": {
            "type": "object",
            "properties": {
              "required": {
                "description": "Whether respondents must answer before continuing.",
                "type": "boolean"
              }
            },
            "additionalProperties": false,
            "description": "Answer validation rules. Omitting it on write makes the question required."
          }
        },
        "additionalProperties": false,
        "description": "Content and settings of a Link question."
      },
      "ModelPlatformNodeMetaTextInputLongInput": {
        "type": "object",
        "properties": {
          "supporting_content_column_count": {
            "description": "Number of supporting content columns under the question: 1 when the question hosts text, images, or dividers, otherwise null.",
            "anyOf": [
              {
                "type": "number",
                "const": 1
              },
              {
                "type": "null"
              }
            ]
          },
          "supporting_content_column_0_alignment": {
            "description": "Vertical alignment of the supporting content column: top, middle, or bottom.",
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "top",
                  "middle",
                  "bottom"
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "question": {
            "description": "The question text shown to respondents, as inline rich text HTML.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "placeholder": {
            "description": "Placeholder text shown inside the empty input.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "default_value": {
            "description": "Value pre-filled for respondents before they answer; null leaves the input empty.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "validation": {
            "type": "object",
            "properties": {
              "required": {
                "description": "Whether respondents must answer before continuing.",
                "type": "boolean"
              }
            },
            "additionalProperties": false,
            "description": "Answer validation rules. Omitting it on write makes the question required."
          }
        },
        "additionalProperties": false,
        "description": "Content and settings of a Long Answer question."
      },
      "ModelPlatformNodeMetaTextInputShortInput": {
        "type": "object",
        "properties": {
          "supporting_content_column_count": {
            "description": "Number of supporting content columns under the question: 1 when the question hosts text, images, or dividers, otherwise null.",
            "anyOf": [
              {
                "type": "number",
                "const": 1
              },
              {
                "type": "null"
              }
            ]
          },
          "supporting_content_column_0_alignment": {
            "description": "Vertical alignment of the supporting content column: top, middle, or bottom.",
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "top",
                  "middle",
                  "bottom"
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "question": {
            "description": "The question text shown to respondents, as inline rich text HTML.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "placeholder": {
            "description": "Placeholder text shown inside the empty input.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "default_value": {
            "description": "Value pre-filled for respondents before they answer; null leaves the input empty.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "validation": {
            "type": "object",
            "properties": {
              "required": {
                "description": "Whether respondents must answer before continuing.",
                "type": "boolean"
              }
            },
            "additionalProperties": false,
            "description": "Answer validation rules. Omitting it on write makes the question required."
          }
        },
        "additionalProperties": false,
        "description": "Content and settings of a Short Answer question."
      },
      "ModelPlatformNodeMetaThankYouInput": {
        "type": "object",
        "properties": {
          "thank_you_title": {
            "description": "Title shown on the thank-you page, as block rich text HTML.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "thank_you_description": {
            "description": "Description shown under the title, as block rich text HTML.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "thank_you_icon": {
            "description": "Icon shown above the title: none, check, or check_animated.",
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "none",
                  "check",
                  "check_animated",
                  "mascot"
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "thank_you_confetti": {
            "description": "Whether confetti plays when the thank-you page appears.",
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ]
          },
          "thank_you_redirect_url": {
            "deprecated": true,
            "description": "Deprecated since 2026-10-11; use a `redirect` logic action. Ignored and not stored.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "additionalProperties": false,
        "description": "Content and settings of the Thank You block on an ending."
      },
      "ModelPlatformNodeMetaTimePickerInput": {
        "type": "object",
        "properties": {
          "supporting_content_column_count": {
            "description": "Number of supporting content columns under the question: 1 when the question hosts text, images, or dividers, otherwise null.",
            "anyOf": [
              {
                "type": "number",
                "const": 1
              },
              {
                "type": "null"
              }
            ]
          },
          "supporting_content_column_0_alignment": {
            "description": "Vertical alignment of the supporting content column: top, middle, or bottom.",
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "top",
                  "middle",
                  "bottom"
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "question": {
            "description": "The question text shown to respondents, as inline rich text HTML.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "placeholder": {
            "description": "Placeholder text shown inside the empty input.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "time_format": {
            "description": "Display format of times: HH:mm or hh:mm A.",
            "type": "string",
            "enum": [
              "HH:mm",
              "hh:mm A"
            ]
          },
          "time_range": {
            "type": "object",
            "properties": {
              "min": {
                "description": "Earliest selectable time, or null.",
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "max": {
                "description": "Latest selectable time, or null.",
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            },
            "additionalProperties": false,
            "description": "Earliest and latest selectable times in HH:mm; null leaves a bound open."
          },
          "time_minute_step": {
            "description": "Minute increment offered by the time picker: 1, 5, 10, 15, 30, or 60.",
            "type": "string",
            "enum": [
              "1",
              "5",
              "10",
              "15",
              "30",
              "60"
            ]
          },
          "default_value": {
            "description": "Value pre-filled for respondents before they answer; null leaves the input empty.",
            "anyOf": [
              {
                "oneOf": [
                  {
                    "type": "object",
                    "properties": {
                      "type": {
                        "type": "string",
                        "const": "static",
                        "description": "static for a fixed value, relative for the moment the respondent opens the form."
                      },
                      "value": {
                        "type": "string",
                        "description": "The fixed value used when type is static."
                      }
                    },
                    "required": [
                      "type",
                      "value"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "type": {
                        "type": "string",
                        "const": "relative",
                        "description": "static for a fixed value, relative for the moment the respondent opens the form."
                      }
                    },
                    "required": [
                      "type"
                    ],
                    "additionalProperties": false
                  }
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "validation": {
            "type": "object",
            "properties": {
              "required": {
                "description": "Whether respondents must answer before continuing.",
                "type": "boolean"
              }
            },
            "additionalProperties": false,
            "description": "Answer validation rules. Omitting it on write makes the question required."
          }
        },
        "additionalProperties": false,
        "description": "Content and settings of a Time question."
      },
      "ModelPlatformNodeMetaYesNoInput": {
        "type": "object",
        "properties": {
          "supporting_content_column_count": {
            "description": "Number of supporting content columns under the question: 1 when the question hosts text, images, or dividers, otherwise null.",
            "anyOf": [
              {
                "type": "number",
                "const": 1
              },
              {
                "type": "null"
              }
            ]
          },
          "supporting_content_column_0_alignment": {
            "description": "Vertical alignment of the supporting content column: top, middle, or bottom.",
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "top",
                  "middle",
                  "bottom"
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "question": {
            "description": "The question text shown to respondents, as inline rich text HTML.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "select_options_data": {
            "description": "Selectable options in display order.",
            "minItems": 2,
            "maxItems": 2,
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "value": {
                  "description": "Stable option value stored in answers.",
                  "type": "string"
                },
                "label": {
                  "description": "Option label shown to respondents.",
                  "type": "string"
                },
                "label_formatted": {
                  "description": "Option label as inline rich text HTML; derived from label when omitted.",
                  "type": "string"
                }
              },
              "additionalProperties": false
            }
          },
          "select_options_style": {
            "description": "Control style of the options: checkbox or radio.",
            "type": "string",
            "enum": [
              "checkbox",
              "radio"
            ]
          },
          "select_options_layout": {
            "description": "Option layout: list, bordered, or inline; applies only when is_select_options_layout_override is true.",
            "type": "string",
            "enum": [
              "list",
              "bordered",
              "inline"
            ]
          },
          "is_select_options_layout_override": {
            "description": "Whether this question overrides the theme's option layout.",
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ]
          },
          "select_options_colored": {
            "description": "Whether the options are painted with the theme's option colors; null follows the theme.",
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ]
          },
          "default_value": {
            "description": "Value pre-filled for respondents before they answer; null leaves the input empty.",
            "anyOf": [
              {
                "type": "string",
                "maxLength": 1000
              },
              {
                "type": "null"
              }
            ]
          },
          "validation": {
            "type": "object",
            "properties": {
              "required": {
                "description": "Whether respondents must answer before continuing.",
                "type": "boolean"
              }
            },
            "additionalProperties": false,
            "description": "Answer validation rules. Omitting it on write makes the question required."
          }
        },
        "additionalProperties": false,
        "description": "Content and settings of a Yes/No question."
      },
      "ModelPlatformNotFoundError": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string",
            "const": "NOT_FOUND",
            "description": "Returned for a form that does not exist, is in Trash, or belongs to another organization. The three are not told apart."
          },
          "message": {
            "type": "string",
            "description": "A human-readable explanation. Not part of the contract; never branch on it."
          },
          "request_id": {
            "type": "string",
            "description": "The ID of the failed request, also sent as the X-Request-Id response header."
          }
        },
        "required": [
          "code",
          "message",
          "request_id"
        ]
      },
      "ModelPlatformOrganization": {
        "type": "object",
        "properties": {
          "public_id": {
            "type": "string",
            "minLength": 10,
            "maxLength": 10,
            "pattern": "^[A-Za-z0-9_-]+$",
            "description": "The public ID of the organization."
          },
          "name": {
            "type": "string",
            "description": "The organization name."
          },
          "plan": {
            "description": "The effective subscription plan of the organization.",
            "$ref": "#/components/schemas/ModelSubscriptionPlanTypes"
          }
        },
        "required": [
          "public_id",
          "name",
          "plan"
        ]
      },
      "ModelPlatformPlanError": {
        "anyOf": [
          {
            "$ref": "#/components/schemas/ModelPlatformPlanLimitError"
          },
          {
            "$ref": "#/components/schemas/ModelPlatformProFeatureError"
          }
        ],
        "description": "A Plan Error: either an exhausted plan limit or a field that needs a larger plan. Branch on code."
      },
      "ModelPlatformPlanLimitError": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string",
            "const": "PLAN_LIMIT_REACHED",
            "description": "The organization is already at a limit its plan sets."
          },
          "message": {
            "type": "string",
            "description": "A human-readable explanation. Not part of the contract; never branch on it."
          },
          "request_id": {
            "type": "string",
            "description": "The ID of the failed request, also sent as the X-Request-Id response header."
          },
          "plan": {
            "description": "The plan whose limit was applied.",
            "$ref": "#/components/schemas/ModelSubscriptionPlanTypes"
          },
          "upgrade_url": {
            "type": "string",
            "description": "Where to review plans and upgrade the organization."
          },
          "limit": {
            "type": "object",
            "properties": {
              "key": {
                "type": "string",
                "enum": [
                  "max_forms",
                  "max_workspaces",
                  "max_active_workflows_per_form"
                ],
                "description": "Which plan limit was reached."
              },
              "max": {
                "type": "integer",
                "minimum": -9007199254740991,
                "maximum": 9007199254740991,
                "description": "What the plan allows."
              },
              "current": {
                "type": "integer",
                "minimum": -9007199254740991,
                "maximum": 9007199254740991,
                "description": "What the organization is using right now."
              }
            },
            "required": [
              "key",
              "max",
              "current"
            ],
            "description": "The limit that blocked the call."
          }
        },
        "required": [
          "code",
          "message",
          "request_id",
          "plan",
          "upgrade_url",
          "limit"
        ]
      },
      "ModelPlatformProFeatureError": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string",
            "const": "PRO_FEATURE_REQUIRED",
            "description": "The request sets a field the plan does not include."
          },
          "message": {
            "type": "string",
            "description": "A human-readable explanation. Not part of the contract; never branch on it."
          },
          "request_id": {
            "type": "string",
            "description": "The ID of the failed request, also sent as the X-Request-Id response header."
          },
          "plan": {
            "description": "The plan whose features were applied.",
            "$ref": "#/components/schemas/ModelSubscriptionPlanTypes"
          },
          "upgrade_url": {
            "type": "string",
            "description": "Where to review plans and upgrade the organization."
          },
          "feature": {
            "type": "string",
            "description": "The plan feature the blocked field needs, such as meta_tags or partial_response_access."
          },
          "path": {
            "type": "string",
            "description": "The path of the blocked field, such as properties/meta_title. On a write it points into the request body; on publish it points into the Draft Document, and it is empty when the blocker is not a document field."
          }
        },
        "required": [
          "code",
          "message",
          "request_id",
          "plan",
          "upgrade_url",
          "feature",
          "path"
        ]
      },
      "ModelPlatformPublishIssue": {
        "type": "object",
        "properties": {
          "code": {
            "description": "The stable Publish Issue code to branch on. Besides the draft checks, validate reports FORM_PUBLISH_EMAIL_UNVERIFIED, FORM_SAFETY_REJECTED, and PRO_FEATURE_REQUIRED for what publish would refuse. New codes are added over time.",
            "$ref": "#/components/schemas/ModelPlatformPublishIssueCode"
          },
          "message": {
            "type": "string",
            "description": "What to fix, in words. Not part of the contract; never branch on it."
          },
          "path": {
            "type": "array",
            "items": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "number"
                }
              ]
            },
            "description": "The path into the Draft Document, with property names and numeric array indexes, such as [\"pages\", 1, \"nodes\", 0, \"meta\", \"select_options_data\"]. Empty when the issue is about the form as a whole."
          },
          "page_public_id": {
            "anyOf": [
              {
                "type": "string",
                "minLength": 4,
                "maxLength": 4,
                "pattern": "^[A-Za-z0-9_-]+$"
              },
              {
                "type": "null"
              }
            ],
            "description": "The page the issue sits on, or null when it is not about one page."
          },
          "node_public_id": {
            "anyOf": [
              {
                "type": "string",
                "minLength": 4,
                "maxLength": 4,
                "pattern": "^[A-Za-z0-9_-]+$"
              },
              {
                "type": "null"
              }
            ],
            "description": "The block the issue sits on, or null when it is not about one block."
          }
        },
        "required": [
          "code",
          "message",
          "path",
          "page_public_id",
          "node_public_id"
        ]
      },
      "ModelPlatformPublishIssueCode": {
        "type": "string",
        "enum": [
          "FORM_PUBLISH_DRAFT_INVALID",
          "FORM_PUBLISH_BLUEPRINT_INVALID",
          "FORM_PUBLISH_BLUEPRINT_TOO_LARGE",
          "FORM_PUBLISH_TOO_MANY_PAGES",
          "FORM_PUBLISH_TOO_MANY_NODES",
          "FORM_PUBLISH_TOO_MANY_PAGE_NODES",
          "FORM_PUBLISH_TOO_MANY_OPTIONS",
          "FORM_PUBLISH_TOO_MANY_TOTAL_OPTIONS",
          "FORM_PUBLISH_TOO_MANY_MATRIX_ROWS",
          "FORM_PUBLISH_TOO_MANY_MATRIX_COLUMNS",
          "FORM_PUBLISH_MISSING_FINAL_PAGE",
          "FORM_PUBLISH_MULTIPLE_FINAL_PAGES",
          "FORM_PUBLISH_FINAL_PAGE_POSITION",
          "FORM_PUBLISH_FINAL_PAGE_HIDDEN",
          "FORM_PUBLISH_ALL_PAGES_HIDDEN",
          "FORM_PUBLISH_FINAL_PAGE_NODES",
          "FORM_PUBLISH_THANK_YOU_PLACEMENT",
          "FORM_PUBLISH_MISSING_QUESTION",
          "FORM_PUBLISH_MULTIPLE_ENTRYPOINTS",
          "FORM_PUBLISH_ENTRYPOINT_FINAL_PAGE",
          "FORM_PUBLISH_ENTRYPOINT_POSITION",
          "FORM_PUBLISH_AUTO_JUMP_INVALID",
          "FORM_PUBLISH_MISSING_OPTIONS",
          "FORM_PUBLISH_MISSING_MATRIX_ROWS",
          "FORM_PUBLISH_NUMBER_SETTINGS_INVALID",
          "FORM_PUBLISH_DANGLING_PIPE",
          "FORM_PUBLISH_EMAIL_UNVERIFIED",
          "FORM_SAFETY_REJECTED",
          "PRO_FEATURE_REQUIRED"
        ]
      },
      "ModelPlatformRevokedToken": {
        "type": "object",
        "properties": {
          "public_id": {
            "description": "The public ID of the token that was revoked.",
            "$ref": "#/components/schemas/ModelPersonalAccessTokenPublicId"
          },
          "name": {
            "type": "string",
            "description": "The name the token was created with."
          },
          "revoked_at": {
            "description": "When the token was revoked. Every later call with it fails.",
            "$ref": "#/components/schemas/ModelDate"
          }
        },
        "required": [
          "public_id",
          "name",
          "revoked_at"
        ]
      },
      "ModelPlatformServiceUnavailableError": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string",
            "const": "SERVICE_UNAVAILABLE",
            "description": "The requested operation has no available capacity. Retry after the Retry-After header says."
          },
          "message": {
            "type": "string",
            "description": "A human-readable explanation. Not part of the contract; never branch on it."
          },
          "request_id": {
            "type": "string",
            "description": "The ID of the failed request, also sent as the X-Request-Id response header."
          },
          "retry_after_seconds": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991,
            "description": "Seconds to wait before retrying. Also sent as the Retry-After response header."
          }
        },
        "required": [
          "code",
          "message",
          "request_id",
          "retry_after_seconds"
        ]
      },
      "ModelPlatformSubmission": {
        "type": "object",
        "properties": {
          "public_id": {
            "description": "The public ID of the submission.",
            "$ref": "#/components/schemas/ModelSubmissionPublicId"
          },
          "form_public_id": {
            "description": "The public ID of the form that received the submission.",
            "$ref": "#/components/schemas/ModelFormPublicId"
          },
          "status": {
            "$ref": "#/components/schemas/ModelPlatformSubmissionStatus"
          },
          "published_version": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991,
            "description": "The published form version the respondent answered."
          },
          "created_at": {
            "description": "When the submission started.",
            "$ref": "#/components/schemas/ModelDate"
          },
          "updated_at": {
            "description": "When the submission was last changed or completed.",
            "$ref": "#/components/schemas/ModelDate"
          },
          "answers": {
            "$ref": "#/components/schemas/ModelPlatformSubmissionAnswers"
          },
          "hidden_values": {
            "description": "Captured Hidden Values keyed by their declared key.",
            "$ref": "#/components/schemas/ModelHiddenValueCapturedValues"
          }
        },
        "required": [
          "public_id",
          "form_public_id",
          "status",
          "published_version",
          "created_at",
          "updated_at",
          "answers",
          "hidden_values"
        ]
      },
      "ModelPlatformSubmissionAnswer": {
        "anyOf": [
          {
            "type": "string"
          },
          {
            "type": "number"
          },
          {
            "type": "boolean"
          },
          {
            "type": "null"
          },
          {
            "$ref": "#/components/schemas/ModelPlatformSubmissionSelectOption"
          },
          {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ModelPlatformSubmissionSelectOption"
            }
          },
          {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ModelPlatformSubmissionMatrixAnswer"
            }
          },
          {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ModelPlatformSubmissionFileAnswer"
            }
          }
        ],
        "description": "A captured answer. Its shape follows the question type. A File Upload answer is always an array of file objects with signed download URLs, even for one file."
      },
      "ModelPlatformSubmissionAnswers": {
        "type": "object",
        "propertyNames": {
          "type": "string",
          "minLength": 4,
          "maxLength": 4,
          "pattern": "^[A-Za-z0-9_-]+$"
        },
        "additionalProperties": {
          "$ref": "#/components/schemas/ModelPlatformSubmissionAnswer"
        },
        "description": "Answers keyed by stable Form Node public ID. Unanswered questions are absent."
      },
      "ModelPlatformSubmissionExportAnswers": {
        "type": "object",
        "propertyNames": {
          "type": "string"
        },
        "additionalProperties": {
          "$ref": "#/components/schemas/ModelPlatformSubmissionAnswer"
        },
        "description": "Answers keyed by the requested question label or stable Form Node public ID."
      },
      "ModelPlatformSubmissionExportContent": {
        "type": "string",
        "description": "A streamed CSV or JSONL attachment with one row per submission."
      },
      "ModelPlatformSubmissionExportRow": {
        "type": "object",
        "properties": {
          "public_id": {
            "description": "The public ID of the submission.",
            "$ref": "#/components/schemas/ModelSubmissionPublicId"
          },
          "form_public_id": {
            "description": "The public ID of the form that received the submission.",
            "$ref": "#/components/schemas/ModelFormPublicId"
          },
          "status": {
            "$ref": "#/components/schemas/ModelPlatformSubmissionStatus"
          },
          "published_version": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991,
            "description": "The published form version the respondent answered."
          },
          "created_at": {
            "description": "When the submission started.",
            "$ref": "#/components/schemas/ModelDate"
          },
          "updated_at": {
            "description": "When the submission was last changed or completed.",
            "$ref": "#/components/schemas/ModelDate"
          },
          "answers": {
            "$ref": "#/components/schemas/ModelPlatformSubmissionExportAnswers"
          },
          "hidden_values": {
            "description": "Captured Hidden Values keyed by their declared key.",
            "$ref": "#/components/schemas/ModelHiddenValueCapturedValues"
          }
        },
        "required": [
          "public_id",
          "form_public_id",
          "status",
          "published_version",
          "created_at",
          "updated_at",
          "answers",
          "hidden_values"
        ],
        "description": "One JSONL export row. CSV flattens the same metadata, answers, and Hidden Values into columns."
      },
      "ModelPlatformSubmissionFileAnswer": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "const": "file",
            "description": "Always file for a file answer."
          },
          "public_id": {
            "type": "string",
            "description": "The public ID of the uploaded file."
          },
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 255,
            "description": "The original file name."
          },
          "size_bytes": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The file size in bytes."
          },
          "mime_type": {
            "type": "string",
            "minLength": 1,
            "maxLength": 255,
            "description": "The detected media type of the file."
          },
          "download_url": {
            "type": "string",
            "format": "uri",
            "description": "A signed download URL that expires after five minutes."
          }
        },
        "required": [
          "type",
          "public_id",
          "name",
          "size_bytes",
          "mime_type",
          "download_url"
        ]
      },
      "ModelPlatformSubmissionList": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ModelPlatformSubmission"
            },
            "description": "One page of submissions ordered by created_at in the requested direction."
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Pass this back as cursor to read the next page. Null on the last page."
          }
        },
        "required": [
          "data",
          "next_cursor"
        ]
      },
      "ModelPlatformSubmissionMatrixAnswer": {
        "type": "array",
        "prefixItems": [
          {
            "type": "string",
            "description": "The stable matrix row value."
          },
          {
            "description": "The option selected for the matrix row.",
            "$ref": "#/components/schemas/ModelPlatformSubmissionSelectOption"
          }
        ],
        "items": false
      },
      "ModelPlatformSubmissionSelectOption": {
        "type": "object",
        "properties": {
          "value": {
            "type": "string",
            "description": "The stable option value stored by the form."
          },
          "label": {
            "type": "string",
            "description": "The option label captured with the answer."
          }
        },
        "required": [
          "value",
          "label"
        ]
      },
      "ModelPlatformSubmissionStatus": {
        "type": "string",
        "enum": [
          "completed",
          "partial"
        ],
        "description": "Whether the respondent finished the form or this is a meaningful Partial Response."
      },
      "ModelPlatformTheme": {
        "type": "object",
        "properties": {
          "id": {
            "$ref": "#/components/schemas/ModelPlatformThemeId"
          },
          "name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Theme name shown in the app, or null for an unnamed theme."
          },
          "is_system": {
            "type": "boolean",
            "description": "Whether this is a theme of the fomr catalog, offered to every organization, rather than one the organization owns."
          },
          "is_new_form_default": {
            "type": "boolean",
            "description": "Whether this is the theme a new form receives. It is also the theme null in styles.theme_id applies. Exactly one theme has it."
          },
          "properties": {
            "description": "The design properties of the theme. A form keeps its own overrides on top of them in styles.override_properties.",
            "$ref": "#/components/schemas/ModelPlatformCanonicalBlueprintThemeOverride"
          }
        },
        "required": [
          "id",
          "name",
          "is_system",
          "is_new_form_default",
          "properties"
        ]
      },
      "ModelPlatformThemeId": {
        "type": "string",
        "format": "uuid",
        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$",
        "description": "The ID of the theme, as styles.theme_id carries it."
      },
      "ModelPlatformThemeList": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ModelPlatformTheme"
            },
            "description": "The system themes, then the themes of the organization, each group oldest first."
          }
        },
        "required": [
          "data"
        ]
      },
      "ModelPlatformThrottledError": {
        "type": "object",
        "properties": {
          "code": {
            "description": "The stable code to branch on.",
            "$ref": "#/components/schemas/ModelPlatformErrorCode"
          },
          "message": {
            "type": "string",
            "description": "A human-readable explanation. Not part of the contract; never branch on it."
          },
          "request_id": {
            "type": "string",
            "description": "The ID of the failed request, also sent as the X-Request-Id response header."
          },
          "policy": {
            "description": "The policy that rejected the call.",
            "$ref": "#/components/schemas/ModelPlatformApiBudgetPolicy"
          },
          "plan": {
            "description": "The plan whose numbers were applied.",
            "$ref": "#/components/schemas/ModelSubscriptionPlanTypes"
          },
          "limit": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991,
            "description": "The policy limit in credits."
          },
          "used": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991,
            "description": "Credits already spent in the open window."
          },
          "remaining": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991,
            "description": "Credits still available under the policy."
          },
          "cost": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991,
            "description": "What the rejected call would have cost."
          },
          "window_seconds": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991,
            "description": "How long the policy window lasts."
          },
          "cooldown_until": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelDate"
              },
              {
                "type": "null"
              }
            ],
            "description": "When the API Cooldown ends, or null when this was not a cooldown."
          },
          "resets_at": {
            "description": "When the window that rejected the call ends.",
            "$ref": "#/components/schemas/ModelDate"
          },
          "retry_after_seconds": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991,
            "description": "Seconds to wait before retrying. Also sent as the Retry-After response header."
          },
          "upgrade_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Where to upgrade for a larger budget, or null when the organization is already on the largest plan."
          }
        },
        "required": [
          "code",
          "message",
          "request_id",
          "policy",
          "plan",
          "limit",
          "used",
          "remaining",
          "cost",
          "window_seconds",
          "cooldown_until",
          "resets_at",
          "retry_after_seconds",
          "upgrade_url"
        ]
      },
      "ModelPlatformThrottledErrorResponse": {
        "anyOf": [
          {
            "$ref": "#/components/schemas/ModelPlatformThrottledError"
          },
          {
            "$ref": "#/components/schemas/ModelPlatformError"
          }
        ],
        "description": "A rejected call. The organization budget names the policy it rejected the call under; the request floor that bounds hammering sends the envelope alone."
      },
      "ModelPlatformUsage": {
        "type": "object",
        "properties": {
          "plan": {
            "description": "The effective subscription plan of the organization.",
            "$ref": "#/components/schemas/ModelSubscriptionPlanTypes"
          },
          "limits": {
            "description": "The plan limits the counts below are measured against.",
            "$ref": "#/components/schemas/ModelPlatformUsageLimits"
          },
          "counts": {
            "description": "What the organization is using right now.",
            "$ref": "#/components/schemas/ModelPlatformUsageCounts"
          },
          "api": {
            "description": "The live Platform API budget state. Reading it spends nothing.",
            "$ref": "#/components/schemas/ModelPlatformApiUsage"
          }
        },
        "required": [
          "plan",
          "limits",
          "counts",
          "api"
        ]
      },
      "ModelPlatformUsageCounts": {
        "type": "object",
        "properties": {
          "forms": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991,
            "description": "The Plan Form Count: forms that are not Private Templates and have not been permanently deleted, including forms in Trash."
          },
          "submissions_this_month": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991,
            "description": "Completed submissions received since the start of the current month, in UTC."
          }
        },
        "required": [
          "forms",
          "submissions_this_month"
        ]
      },
      "ModelPlatformUsageLimits": {
        "type": "object",
        "properties": {
          "max_forms": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": -9007199254740991,
                "maximum": 9007199254740991
              },
              {
                "type": "null"
              }
            ],
            "description": "How many forms the plan allows, or null when the plan sets no limit."
          },
          "max_submissions_per_month": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": -9007199254740991,
                "maximum": 9007199254740991
              },
              {
                "type": "null"
              }
            ],
            "description": "How many submissions the plan allows each month, or null when the plan sets no limit."
          }
        },
        "required": [
          "max_forms",
          "max_submissions_per_month"
        ]
      },
      "ModelPlatformWorkflow": {
        "type": "object",
        "properties": {
          "public_id": {
            "description": "The public ID of the workflow. Use it in the other workflow calls.",
            "$ref": "#/components/schemas/ModelPlatformWorkflowPublicId"
          },
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 100,
            "description": "Workflow name shown in the Workflows tab of the form."
          },
          "is_enabled": {
            "type": "boolean",
            "description": "Whether the workflow runs when a respondent completes the form. Change it with enable and disable."
          },
          "validation_status": {
            "description": "unchecked until the workflow is first enabled, valid once it passed the enable checks, invalid when the last check failed.",
            "$ref": "#/components/schemas/ModelWorkflowValidationStatus"
          },
          "validation_error_code": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelWorkflowValidationIssueCode"
              },
              {
                "type": "null"
              }
            ],
            "description": "The code of the check that failed last, or null. It matches the issue code an enable call reported."
          },
          "created_at": {
            "description": "When the workflow was created.",
            "$ref": "#/components/schemas/ModelDate"
          },
          "updated_at": {
            "description": "When the workflow last changed.",
            "$ref": "#/components/schemas/ModelDate"
          },
          "nodes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ModelPlatformWorkflowNode"
            },
            "description": "The nodes of the workflow graph, oldest first. Issue paths index into this array."
          },
          "edges": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ModelPlatformWorkflowEdge"
            },
            "description": "The edges of the workflow graph, oldest first. Issue paths index into this array."
          }
        },
        "required": [
          "public_id",
          "name",
          "is_enabled",
          "validation_status",
          "validation_error_code",
          "created_at",
          "updated_at",
          "nodes",
          "edges"
        ],
        "description": "The Workflow Document: a workflow of a form with its whole graph. Read it, change it, and send it back to replace it."
      },
      "ModelPlatformWorkflowDryRunResult": {
        "type": "object",
        "properties": {
          "dry_run": {
            "type": "boolean",
            "const": true,
            "description": "Always true. Nothing was written, and minted IDs are not reserved for a later call."
          },
          "workflow": {
            "description": "The Workflow Document the real call would have stored.",
            "$ref": "#/components/schemas/ModelPlatformWorkflow"
          }
        },
        "required": [
          "dry_run",
          "workflow"
        ]
      },
      "ModelPlatformWorkflowEdge": {
        "type": "object",
        "properties": {
          "public_id": {
            "description": "The public ID of the edge.",
            "$ref": "#/components/schemas/ModelPlatformWorkflowEdgePublicId"
          },
          "source_node_public_id": {
            "description": "The public ID of the node the edge starts from.",
            "$ref": "#/components/schemas/ModelPlatformWorkflowNodePublicId"
          },
          "target_node_public_id": {
            "description": "The public ID of the node the edge leads to.",
            "$ref": "#/components/schemas/ModelPlatformWorkflowNodePublicId"
          },
          "source_handle": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 100
              },
              {
                "type": "null"
              }
            ],
            "description": "Connection point on the source node in the app canvas."
          },
          "target_handle": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 100
              },
              {
                "type": "null"
              }
            ],
            "description": "Connection point on the target node in the app canvas."
          }
        },
        "required": [
          "public_id",
          "source_node_public_id",
          "target_node_public_id",
          "source_handle",
          "target_handle"
        ],
        "description": "A connection that runs the target node after the source node."
      },
      "ModelPlatformWorkflowEdgePublicId": {
        "type": "string",
        "minLength": 1,
        "maxLength": 22,
        "pattern": "^[A-Za-z0-9_-]+$",
        "description": "The public ID of a workflow edge."
      },
      "ModelPlatformWorkflowEdgePublicIdInput": {
        "type": "string",
        "minLength": 1,
        "maxLength": 22,
        "pattern": "^[A-Za-z0-9_-]+$",
        "description": "The public ID of a workflow edge."
      },
      "ModelPlatformWorkflowEdgeWriteInput": {
        "type": "object",
        "properties": {
          "public_id": {
            "description": "Optional on write. A present ID keeps the edge of this workflow with that ID, or creates an edge with that ID; an absent ID keeps an existing edge between the same nodes and handles, or creates one with a server-minted ID.",
            "minLength": 8,
            "$ref": "#/components/schemas/ModelPlatformWorkflowEdgePublicIdInput"
          },
          "source_node_public_id": {
            "description": "The public ID of the node the edge starts from, in the nodes of the same document. Only the trigger can start edges.",
            "$ref": "#/components/schemas/ModelPlatformWorkflowNodePublicIdInput"
          },
          "target_node_public_id": {
            "description": "The public ID of the node the edge leads to, in the nodes of the same document.",
            "$ref": "#/components/schemas/ModelPlatformWorkflowNodePublicIdInput"
          },
          "source_handle": {
            "description": "Connection point on the source node in the app canvas. Left out, source, as the app connects nodes.",
            "anyOf": [
              {
                "type": "string",
                "maxLength": 100
              },
              {
                "type": "null"
              }
            ]
          },
          "target_handle": {
            "description": "Connection point on the target node in the app canvas. Left out, target, as the app connects nodes.",
            "anyOf": [
              {
                "type": "string",
                "maxLength": 100
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "source_node_public_id",
          "target_node_public_id"
        ],
        "additionalProperties": false,
        "description": "A connection that runs the target node after the source node."
      },
      "ModelPlatformWorkflowGoogleSheetsConfig": {
        "type": "object",
        "properties": {
          "connection_public_id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 22,
            "description": "The public ID of a connected Google Sheets connection of the organization, as listIntegrationConnections returns it."
          },
          "spreadsheet_name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 500,
            "description": "Name of the spreadsheet fomr creates in that Google account to receive the completed responses, trimmed."
          }
        },
        "required": [
          "connection_public_id",
          "spreadsheet_name"
        ],
        "description": "The Google Sheets destination of the step. Once set, fomr creates the spreadsheet, and the destination cannot change afterwards: replace the node with a new one to use another spreadsheet."
      },
      "ModelPlatformWorkflowGoogleSheetsConfigInput": {
        "type": "object",
        "properties": {
          "connection_public_id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 22,
            "description": "The public ID of a connected Google Sheets connection of the organization, as listIntegrationConnections returns it."
          },
          "spreadsheet_name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 500,
            "description": "Name of the spreadsheet fomr creates in that Google account to receive the completed responses, trimmed."
          }
        },
        "required": [
          "connection_public_id",
          "spreadsheet_name"
        ],
        "additionalProperties": false,
        "description": "The Google Sheets destination of the step. Once set, fomr creates the spreadsheet, and the destination cannot change afterwards: replace the node with a new one to use another spreadsheet."
      },
      "ModelPlatformWorkflowGoogleSheetsDestination": {
        "type": "object",
        "properties": {
          "spreadsheet_id": {
            "anyOf": [
              {
                "type": "string",
                "minLength": 1,
                "maxLength": 200
              },
              {
                "type": "null"
              }
            ],
            "description": "The Google ID of the spreadsheet fomr created, or null while it is not known."
          },
          "spreadsheet_url": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 1000,
                "format": "uri"
              },
              {
                "type": "null"
              }
            ],
            "description": "The link that opens the spreadsheet in Google Sheets, or null while it is not known."
          },
          "spreadsheet_name": {
            "anyOf": [
              {
                "type": "string",
                "minLength": 1,
                "maxLength": 500
              },
              {
                "type": "null"
              }
            ],
            "description": "The name the spreadsheet was created with, or null while it is not known."
          },
          "sheet_name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 100,
            "description": "The worksheet inside the spreadsheet that receives one row per completed response."
          }
        },
        "required": [
          "spreadsheet_id",
          "spreadsheet_url",
          "spreadsheet_name",
          "sheet_name"
        ],
        "description": "The spreadsheet fomr created for the step. Read-only."
      },
      "ModelPlatformWorkflowGoogleSheetsDestinationInput": {
        "type": "object",
        "properties": {
          "spreadsheet_id": {
            "anyOf": [
              {
                "type": "string",
                "minLength": 1,
                "maxLength": 200
              },
              {
                "type": "null"
              }
            ],
            "description": "The Google ID of the spreadsheet fomr created, or null while it is not known."
          },
          "spreadsheet_url": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 1000,
                "format": "uri"
              },
              {
                "type": "null"
              }
            ],
            "description": "The link that opens the spreadsheet in Google Sheets, or null while it is not known."
          },
          "spreadsheet_name": {
            "anyOf": [
              {
                "type": "string",
                "minLength": 1,
                "maxLength": 500
              },
              {
                "type": "null"
              }
            ],
            "description": "The name the spreadsheet was created with, or null while it is not known."
          },
          "sheet_name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 100,
            "description": "The worksheet inside the spreadsheet that receives one row per completed response."
          }
        },
        "required": [
          "spreadsheet_id",
          "spreadsheet_url",
          "spreadsheet_name",
          "sheet_name"
        ],
        "description": "The spreadsheet fomr created for the step. Read-only."
      },
      "ModelPlatformWorkflowList": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ModelPlatformWorkflowSummary"
            },
            "description": "Every workflow of the form, oldest first."
          }
        },
        "required": [
          "data"
        ]
      },
      "ModelPlatformWorkflowNode": {
        "oneOf": [
          {
            "$ref": "#/components/schemas/ModelPlatformWorkflowNodeFormCompleted"
          },
          {
            "$ref": "#/components/schemas/ModelPlatformWorkflowNodeGoogleSheetsAddRow"
          }
        ],
        "discriminator": {
          "propertyName": "node_type_key",
          "mapping": {
            "form_completed": "#/components/schemas/ModelPlatformWorkflowNodeFormCompleted",
            "google_sheets_add_row": "#/components/schemas/ModelPlatformWorkflowNodeGoogleSheetsAddRow"
          }
        }
      },
      "ModelPlatformWorkflowNodeFormCompleted": {
        "type": "object",
        "properties": {
          "public_id": {
            "description": "The public ID of the node. Edges name their endpoints with it.",
            "$ref": "#/components/schemas/ModelPlatformWorkflowNodePublicId"
          },
          "node_type_key": {
            "type": "string",
            "const": "form_completed",
            "description": "Discriminates the node type. A node keeps its type: to change it, replace the node with a new one."
          },
          "position": {
            "description": "Canvas position of the node in the app workflow builder. It has no effect on how the workflow runs.",
            "$ref": "#/components/schemas/ModelPlatformWorkflowNodePosition"
          }
        },
        "required": [
          "public_id",
          "node_type_key",
          "position"
        ],
        "description": "Node type form_completed: New response. Runs when a respondent completes this form. Kind: trigger.",
        "title": "form_completed"
      },
      "ModelPlatformWorkflowNodeGoogleSheetsAddRow": {
        "type": "object",
        "properties": {
          "public_id": {
            "description": "The public ID of the node. Edges name their endpoints with it.",
            "$ref": "#/components/schemas/ModelPlatformWorkflowNodePublicId"
          },
          "node_type_key": {
            "type": "string",
            "const": "google_sheets_add_row",
            "description": "Discriminates the node type. A node keeps its type: to change it, replace the node with a new one."
          },
          "position": {
            "description": "Canvas position of the node in the app workflow builder. It has no effect on how the workflow runs.",
            "$ref": "#/components/schemas/ModelPlatformWorkflowNodePosition"
          },
          "config": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelPlatformWorkflowGoogleSheetsConfig"
              },
              {
                "type": "null"
              }
            ],
            "description": "The destination, or null while the step has none. A workflow cannot be enabled while a step has no destination."
          },
          "metadata": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelPlatformWorkflowGoogleSheetsDestination"
              },
              {
                "type": "null"
              }
            ],
            "description": "The spreadsheet fomr created for the destination, or null before one exists.",
            "readOnly": true
          }
        },
        "required": [
          "public_id",
          "node_type_key",
          "position",
          "config",
          "metadata"
        ],
        "description": "Node type google_sheets_add_row: Sync to Google Sheets. Append a completed response to a spreadsheet. Kind: action.",
        "title": "google_sheets_add_row"
      },
      "ModelPlatformWorkflowNodePosition": {
        "type": "object",
        "properties": {
          "x": {
            "type": "number",
            "description": "Horizontal canvas coordinate of the node in the app workflow builder."
          },
          "y": {
            "type": "number",
            "description": "Vertical canvas coordinate of the node in the app workflow builder."
          }
        },
        "required": [
          "x",
          "y"
        ],
        "description": "Where the node sits on the workflow canvas in the app. It has no effect on how the workflow runs."
      },
      "ModelPlatformWorkflowNodePositionInput": {
        "type": "object",
        "properties": {
          "x": {
            "type": "number",
            "description": "Horizontal canvas coordinate of the node in the app workflow builder."
          },
          "y": {
            "type": "number",
            "description": "Vertical canvas coordinate of the node in the app workflow builder."
          }
        },
        "required": [
          "x",
          "y"
        ],
        "description": "Where the node sits on the workflow canvas in the app. It has no effect on how the workflow runs."
      },
      "ModelPlatformWorkflowNodePublicId": {
        "type": "string",
        "minLength": 1,
        "maxLength": 22,
        "pattern": "^[A-Za-z0-9_-]+$",
        "description": "The public ID of a workflow node."
      },
      "ModelPlatformWorkflowNodePublicIdInput": {
        "type": "string",
        "minLength": 1,
        "maxLength": 22,
        "pattern": "^[A-Za-z0-9_-]+$",
        "description": "The public ID of a workflow node."
      },
      "ModelPlatformWorkflowNodeWriteFormCompletedInput": {
        "type": "object",
        "properties": {
          "public_id": {
            "description": "Optional on write. A present ID keeps the node of this workflow with that ID, or creates a node with that ID when the workflow has none; an absent ID creates a node with a server-minted ID. Node IDs are unique across fomr and never reused, so an ID another workflow or a removed node holds is refused. A chosen ID has at least 8 characters.",
            "minLength": 8,
            "$ref": "#/components/schemas/ModelPlatformWorkflowNodePublicIdInput"
          },
          "node_type_key": {
            "type": "string",
            "const": "form_completed",
            "description": "Discriminates the node type. A node keeps its type: to change it, replace the node with a new one."
          },
          "position": {
            "description": "Canvas position of the node in the app workflow builder. It has no effect on how the workflow runs.",
            "$ref": "#/components/schemas/ModelPlatformWorkflowNodePositionInput"
          },
          "config": {
            "description": "Optional and always empty: the trigger has no settings, and the read document leaves the field out.",
            "type": "object",
            "properties": {},
            "additionalProperties": false
          }
        },
        "required": [
          "node_type_key",
          "position"
        ],
        "additionalProperties": false,
        "description": "Node type form_completed: New response. Runs when a respondent completes this form. Kind: trigger.",
        "title": "form_completed"
      },
      "ModelPlatformWorkflowNodeWriteGoogleSheetsAddRowInput": {
        "type": "object",
        "properties": {
          "public_id": {
            "description": "Optional on write. A present ID keeps the node of this workflow with that ID, or creates a node with that ID when the workflow has none; an absent ID creates a node with a server-minted ID. Node IDs are unique across fomr and never reused, so an ID another workflow or a removed node holds is refused. A chosen ID has at least 8 characters.",
            "minLength": 8,
            "$ref": "#/components/schemas/ModelPlatformWorkflowNodePublicIdInput"
          },
          "node_type_key": {
            "type": "string",
            "const": "google_sheets_add_row",
            "description": "Discriminates the node type. A node keeps its type: to change it, replace the node with a new one."
          },
          "position": {
            "description": "Canvas position of the node in the app workflow builder. It has no effect on how the workflow runs.",
            "$ref": "#/components/schemas/ModelPlatformWorkflowNodePositionInput"
          },
          "config": {
            "description": "The destination, or null for a step without one yet, as the app allows while building. Left out on an existing node, the stored destination is kept. A destination already set cannot be changed or cleared.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelPlatformWorkflowGoogleSheetsConfigInput"
              },
              {
                "type": "null"
              }
            ]
          },
          "metadata": {
            "description": "The spreadsheet fomr created for the destination, or null before one exists. Ignored on write.",
            "readOnly": true,
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelPlatformWorkflowGoogleSheetsDestinationInput"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "node_type_key",
          "position"
        ],
        "additionalProperties": false,
        "description": "Node type google_sheets_add_row: Sync to Google Sheets. Append a completed response to a spreadsheet. Kind: action.",
        "title": "google_sheets_add_row"
      },
      "ModelPlatformWorkflowNodeWriteInput": {
        "oneOf": [
          {
            "$ref": "#/components/schemas/ModelPlatformWorkflowNodeWriteFormCompletedInput"
          },
          {
            "$ref": "#/components/schemas/ModelPlatformWorkflowNodeWriteGoogleSheetsAddRowInput"
          }
        ],
        "discriminator": {
          "propertyName": "node_type_key",
          "mapping": {
            "form_completed": "#/components/schemas/ModelPlatformWorkflowNodeWriteFormCompletedInput",
            "google_sheets_add_row": "#/components/schemas/ModelPlatformWorkflowNodeWriteGoogleSheetsAddRowInput"
          }
        }
      },
      "ModelPlatformWorkflowNotFoundError": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string",
            "const": "NOT_FOUND",
            "description": "Returned for a form or workflow that does not exist, is in Trash or deleted, belongs to another organization, or for a Private Template, which has no workflows. These cases are not told apart."
          },
          "message": {
            "type": "string",
            "description": "A human-readable explanation. Not part of the contract; never branch on it."
          },
          "request_id": {
            "type": "string",
            "description": "The ID of the failed request, also sent as the X-Request-Id response header."
          }
        },
        "required": [
          "code",
          "message",
          "request_id"
        ]
      },
      "ModelPlatformWorkflowPublicId": {
        "type": "string",
        "minLength": 1,
        "maxLength": 22,
        "pattern": "^[A-Za-z0-9_-]+$",
        "description": "The public ID of the workflow."
      },
      "ModelPlatformWorkflowPublicIdInput": {
        "type": "string",
        "minLength": 1,
        "maxLength": 22,
        "pattern": "^[A-Za-z0-9_-]+$",
        "description": "The public ID of the workflow."
      },
      "ModelPlatformWorkflowSummary": {
        "type": "object",
        "properties": {
          "public_id": {
            "description": "The public ID of the workflow. Use it in the other workflow calls.",
            "$ref": "#/components/schemas/ModelPlatformWorkflowPublicId"
          },
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 100,
            "description": "Workflow name shown in the Workflows tab of the form."
          },
          "is_enabled": {
            "type": "boolean",
            "description": "Whether the workflow runs when a respondent completes the form. Change it with enable and disable."
          },
          "validation_status": {
            "description": "unchecked until the workflow is first enabled, valid once it passed the enable checks, invalid when the last check failed.",
            "$ref": "#/components/schemas/ModelWorkflowValidationStatus"
          },
          "validation_error_code": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelWorkflowValidationIssueCode"
              },
              {
                "type": "null"
              }
            ],
            "description": "The code of the check that failed last, or null. It matches the issue code an enable call reported."
          },
          "created_at": {
            "description": "When the workflow was created.",
            "$ref": "#/components/schemas/ModelDate"
          },
          "updated_at": {
            "description": "When the workflow last changed.",
            "$ref": "#/components/schemas/ModelDate"
          }
        },
        "required": [
          "public_id",
          "name",
          "is_enabled",
          "validation_status",
          "validation_error_code",
          "created_at",
          "updated_at"
        ],
        "description": "A workflow of a form without its graph, as listFormWorkflows returns it."
      },
      "ModelPlatformWorkflowWriteInput": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 100,
            "description": "Workflow name, trimmed."
          },
          "nodes": {
            "maxItems": 50,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ModelPlatformWorkflowNodeWriteInput"
            },
            "description": "Every node the workflow should have. On replace, a stored node whose ID is left out is removed. A runnable workflow has exactly one form_completed trigger."
          },
          "edges": {
            "maxItems": 100,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ModelPlatformWorkflowEdgeWriteInput"
            },
            "description": "Every edge the workflow should have. On replace, a stored edge that is not sent is removed."
          },
          "public_id": {
            "description": "The public ID of the workflow. Ignored on write.",
            "readOnly": true,
            "$ref": "#/components/schemas/ModelPlatformWorkflowPublicIdInput"
          },
          "is_enabled": {
            "description": "Whether the workflow runs. Ignored on write; use enable and disable.",
            "readOnly": true,
            "type": "boolean"
          },
          "validation_status": {
            "description": "The result of the last enable check. Ignored on write.",
            "readOnly": true,
            "$ref": "#/components/schemas/ModelWorkflowValidationStatusInput"
          },
          "validation_error_code": {
            "description": "The code of the check that failed last. Ignored on write.",
            "readOnly": true,
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelWorkflowValidationIssueCodeInput"
              },
              {
                "type": "null"
              }
            ]
          },
          "created_at": {
            "description": "When the workflow was created. Ignored on write.",
            "readOnly": true,
            "type": "string"
          },
          "updated_at": {
            "description": "When the workflow last changed. Ignored on write.",
            "readOnly": true,
            "type": "string"
          }
        },
        "required": [
          "name",
          "nodes",
          "edges"
        ],
        "additionalProperties": false,
        "description": "A Workflow Document to create or replace a workflow with. The read-only fields of a read document are accepted and ignored."
      },
      "ModelPlatformWorkspace": {
        "type": "object",
        "properties": {
          "public_id": {
            "type": "string",
            "minLength": 4,
            "maxLength": 4,
            "description": "The public ID of the workspace. Use it in the other workspace calls and wherever a call takes workspace_public_id.",
            "$ref": "#/components/schemas/ModelPlatformWorkspacePublicId"
          },
          "name": {
            "type": "string",
            "description": "Workspace name shown in the app sidebar."
          },
          "is_default": {
            "type": "boolean",
            "description": "Whether this is the Default Workspace, which always exists, always comes first, and cannot be deleted."
          },
          "color": {
            "description": "Color key of the workspace icon in the app.",
            "$ref": "#/components/schemas/ModelWorkspaceColor"
          },
          "icon": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelWorkspaceIcon"
              },
              {
                "type": "null"
              }
            ],
            "description": "Icon key of the workspace in the app, or null for the initial letter."
          }
        },
        "required": [
          "public_id",
          "name",
          "is_default",
          "color",
          "icon"
        ]
      },
      "ModelPlatformWorkspaceCreateInputInput": {
        "type": "object",
        "properties": {
          "name": {
            "description": "Workspace name, trimmed. It must differ from the name of every other active workspace, compared without regard to case.",
            "$ref": "#/components/schemas/ModelWorkspaceNameInput"
          },
          "color": {
            "description": "Color key of the workspace icon. Left out, the first color no other workspace uses, as the app suggests, or indigo once every color is taken.",
            "$ref": "#/components/schemas/ModelWorkspaceColorInput"
          },
          "icon": {
            "description": "Icon key of the workspace. Left out or null, the workspace shows the initial letter of its name.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelWorkspaceIconInput"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "name"
        ],
        "additionalProperties": false
      },
      "ModelPlatformWorkspaceList": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ModelPlatformWorkspace"
            },
            "description": "Every active workspace of the organization, the Default Workspace first, then in sidebar order."
          }
        },
        "required": [
          "data"
        ]
      },
      "ModelPlatformWorkspaceNotFoundError": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string",
            "const": "NOT_FOUND",
            "description": "Returned for a workspace that does not exist, was deleted, or belongs to another organization. The three are not told apart."
          },
          "message": {
            "type": "string",
            "description": "A human-readable explanation. Not part of the contract; never branch on it."
          },
          "request_id": {
            "type": "string",
            "description": "The ID of the failed request, also sent as the X-Request-Id response header."
          }
        },
        "required": [
          "code",
          "message",
          "request_id"
        ]
      },
      "ModelPlatformWorkspacePublicId": {
        "description": "The public ID of the workspace (4 characters).",
        "$ref": "#/components/schemas/ModelWorkspacePublicId"
      },
      "ModelPlatformWorkspacePublicIdInput": {
        "description": "The public ID of the workspace (4 characters).",
        "$ref": "#/components/schemas/ModelWorkspacePublicIdInput"
      },
      "ModelPlatformWorkspaceUpdateInputInput": {
        "type": "object",
        "properties": {
          "name": {
            "description": "Workspace name, trimmed. It must differ from the name of every other active workspace, compared without regard to case. Leave the field out to keep the current name.",
            "$ref": "#/components/schemas/ModelWorkspaceNameInput"
          },
          "color": {
            "description": "Color key of the workspace icon. Leave the field out to keep the current color.",
            "$ref": "#/components/schemas/ModelWorkspaceColorInput"
          },
          "icon": {
            "description": "Icon key of the workspace. Send null to show the initial letter, or leave the field out to keep the current icon.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelWorkspaceIconInput"
              },
              {
                "type": "null"
              }
            ]
          },
          "position": {
            "description": "Where to place the workspace in the sidebar, counted from 0 among the workspaces after the Default Workspace, as dragging it in the app does. A position past the end places it last. The Default Workspace always stays first and cannot be moved.",
            "type": "integer",
            "minimum": 0,
            "maximum": 1000000
          }
        },
        "additionalProperties": false
      },
      "ModelStyleAlignX": {
        "type": "string",
        "enum": [
          "left",
          "center",
          "right"
        ]
      },
      "ModelStyleAlignXInput": {
        "type": "string",
        "enum": [
          "left",
          "center",
          "right"
        ]
      },
      "ModelStyleAlignY": {
        "type": "string",
        "enum": [
          "top",
          "center"
        ]
      },
      "ModelStyleAlignYInput": {
        "type": "string",
        "enum": [
          "top",
          "center"
        ]
      },
      "ModelStyleBorderRadius": {
        "type": "string",
        "enum": [
          "none",
          "small",
          "full"
        ]
      },
      "ModelStyleBorderRadiusInput": {
        "type": "string",
        "enum": [
          "none",
          "small",
          "full"
        ]
      },
      "ModelStyleBorderShadow": {
        "type": "string",
        "enum": [
          "none",
          "small",
          "large"
        ]
      },
      "ModelStyleBorderShadowInput": {
        "type": "string",
        "enum": [
          "none",
          "small",
          "large"
        ]
      },
      "ModelStyleLogoAlignX": {
        "type": "string",
        "enum": [
          "left",
          "center",
          "right"
        ]
      },
      "ModelStyleLogoAlignXInput": {
        "type": "string",
        "enum": [
          "left",
          "center",
          "right"
        ]
      },
      "ModelStyleSize": {
        "type": "string",
        "enum": [
          "xs",
          "sm",
          "md",
          "lg",
          "xl"
        ]
      },
      "ModelStyleSizeInput": {
        "type": "string",
        "enum": [
          "xs",
          "sm",
          "md",
          "lg",
          "xl"
        ]
      },
      "ModelSubmissionFileCategory": {
        "type": "string",
        "enum": [
          "image",
          "video",
          "audio",
          "document",
          "archive"
        ]
      },
      "ModelSubmissionFileCategoryInput": {
        "type": "string",
        "enum": [
          "image",
          "video",
          "audio",
          "document",
          "archive"
        ]
      },
      "ModelSubmissionPublicId": {
        "type": "string",
        "minLength": 22,
        "maxLength": 22,
        "pattern": "^[A-Za-z0-9_-]+$"
      },
      "ModelSubscriptionPlanTypes": {
        "type": "string",
        "enum": [
          "free",
          "pro"
        ]
      },
      "ModelThemeImageUrl": {
        "type": "string",
        "maxLength": 1000,
        "format": "uri"
      },
      "ModelThemeImageUrlInput": {
        "type": "string",
        "maxLength": 1000,
        "format": "uri"
      },
      "ModelWorkflowValidationIssueCode": {
        "type": "string",
        "enum": [
          "WORKFLOW_VALIDATION_TOO_MANY_WORKFLOWS",
          "WORKFLOW_VALIDATION_TOO_MANY_NODES",
          "WORKFLOW_VALIDATION_TOO_MANY_EDGES",
          "WORKFLOW_VALIDATION_NODE_CONFIG_TOO_LARGE",
          "WORKFLOW_VALIDATION_NODE_CONFIG_INVALID",
          "WORKFLOW_VALIDATION_MISSING_TRIGGER",
          "WORKFLOW_VALIDATION_MULTIPLE_TRIGGERS",
          "WORKFLOW_VALIDATION_UNSUPPORTED_NODE_TYPE",
          "WORKFLOW_VALIDATION_INTEGRATION_CONNECTION_UNAVAILABLE",
          "WORKFLOW_VALIDATION_INVALID_EDGE",
          "WORKFLOW_VALIDATION_CYCLE",
          "WORKFLOW_VALIDATION_UNREACHABLE_NODE",
          "WORKFLOW_VALIDATION_RUNTIME_PHASE_MISMATCH"
        ]
      },
      "ModelWorkflowValidationIssueCodeInput": {
        "type": "string",
        "enum": [
          "WORKFLOW_VALIDATION_TOO_MANY_WORKFLOWS",
          "WORKFLOW_VALIDATION_TOO_MANY_NODES",
          "WORKFLOW_VALIDATION_TOO_MANY_EDGES",
          "WORKFLOW_VALIDATION_NODE_CONFIG_TOO_LARGE",
          "WORKFLOW_VALIDATION_NODE_CONFIG_INVALID",
          "WORKFLOW_VALIDATION_MISSING_TRIGGER",
          "WORKFLOW_VALIDATION_MULTIPLE_TRIGGERS",
          "WORKFLOW_VALIDATION_UNSUPPORTED_NODE_TYPE",
          "WORKFLOW_VALIDATION_INTEGRATION_CONNECTION_UNAVAILABLE",
          "WORKFLOW_VALIDATION_INVALID_EDGE",
          "WORKFLOW_VALIDATION_CYCLE",
          "WORKFLOW_VALIDATION_UNREACHABLE_NODE",
          "WORKFLOW_VALIDATION_RUNTIME_PHASE_MISMATCH"
        ]
      },
      "ModelWorkflowValidationStatus": {
        "type": "string",
        "enum": [
          "unchecked",
          "valid",
          "invalid"
        ]
      },
      "ModelWorkflowValidationStatusInput": {
        "type": "string",
        "enum": [
          "unchecked",
          "valid",
          "invalid"
        ]
      },
      "ModelWorkspaceColor": {
        "type": "string",
        "enum": [
          "zinc",
          "red",
          "orange",
          "amber",
          "green",
          "teal",
          "blue",
          "indigo",
          "violet",
          "pink"
        ]
      },
      "ModelWorkspaceColorInput": {
        "type": "string",
        "enum": [
          "zinc",
          "red",
          "orange",
          "amber",
          "green",
          "teal",
          "blue",
          "indigo",
          "violet",
          "pink"
        ]
      },
      "ModelWorkspaceIcon": {
        "type": "string",
        "enum": [
          "home",
          "briefcase",
          "building",
          "users",
          "rocket",
          "heart",
          "star",
          "bolt",
          "school",
          "shopping-cart",
          "calendar",
          "chart-bar",
          "flask",
          "palette",
          "world",
          "mail",
          "message",
          "code",
          "camera",
          "music"
        ]
      },
      "ModelWorkspaceIconInput": {
        "type": "string",
        "enum": [
          "home",
          "briefcase",
          "building",
          "users",
          "rocket",
          "heart",
          "star",
          "bolt",
          "school",
          "shopping-cart",
          "calendar",
          "chart-bar",
          "flask",
          "palette",
          "world",
          "mail",
          "message",
          "code",
          "camera",
          "music"
        ]
      },
      "ModelWorkspaceNameInput": {
        "type": "string",
        "minLength": 1,
        "maxLength": 40
      },
      "ModelWorkspacePublicId": {
        "type": "string",
        "minLength": 4,
        "maxLength": 4
      },
      "ModelWorkspacePublicIdInput": {
        "type": "string",
        "minLength": 4,
        "maxLength": 4
      }
    }
  }
}
