Charthop form API

The form API from Charthop — 15 operation(s) for form.

Operations 19

GET /v1/org/{orgId}/form Return all forms in the organization paginated #
POST /v1/org/{orgId}/form Create a form #
GET /v1/org/{orgId}/form/available Return all active forms applicable to a particular entity #
DELETE /v1/org/{orgId}/form/delete Delete forms #
GET /v1/org/{orgId}/form/person/{personId} Return all active forms applicable to a particular person #
POST /v1/org/{orgId}/form/status Update status for existing forms #
GET /v1/org/{orgId}/form/{formId} Return a particular form by id #
PATCH /v1/org/{orgId}/form/{formId} Update an existing form #
DELETE /v1/org/{orgId}/form/{formId} Delete a form #
POST /v1/org/{orgId}/form/{formId} Submit data from a form #
POST /v1/org/{orgId}/form/{formId}/collect Collect data for an existing form, sending emails and chat notifications to people being requested #
GET /v1/org/{orgId}/form/{formId}/draft Get the current state of form draft data #
POST /v1/org/{orgId}/form/{formId}/duplicate Duplicate a form #
POST /v1/org/{orgId}/form/{formId}/preview-render Render a preview of a form #
POST /v1/org/{orgId}/form/{formId}/remind Sends reminder for a form with existing tasks, sending emails/chat notifications to people being requested #
GET /v1/org/{orgId}/form/{formId}/render Render a form for display #
POST /v1/org/{orgId}/form/{formId}/rerender/question/{updateQuestionId} Re-render form blocks based on changes to the form values #
POST /v1/org/{orgId}/form/{formId}/submit Submit data from a form #
POST /v1/org/{orgId}/form/{formId}/submit/draft Submit data from a form draft #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/charthop-form-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

charthop-form-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  description: REST API for ChartHop
  version: V1.0.0
  title: ChartHop access Form API
  contact:
    name: ChartHop
    url: https://www.charthop.com
    email: support@charthop.com
servers:
- url: https://localhost
- url: http://localhost
tags:
- name: form
paths:
  /v1/org/{orgId}/form:
    get:
      tags:
      - form
      summary: Return all forms in the organization paginated
      operationId: findForms
      parameters:
      - name: orgId
        in: path
        description: Org identifier (either id or slug)
        required: true
        schema:
          type: string
      - name: status
        in: query
        description: Status to filter by
        required: false
        schema:
          type: string
          enum:
          - ACTIVE
          - INACTIVE
          - ARCHIVED
      - name: from
        in: query
        description: Form id to start paginating from
        required: false
        schema:
          type: string
      - name: limit
        in: query
        description: Number of results to return
        required: false
        schema:
          type: integer
          format: int32
      - name: returnAccess
        in: query
        description: 'Return access information -- pass a list of actions to check, for example: create,update,delete'
        required: false
        schema:
          type: string
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResultsForm'
        '400':
          description: bad request
        '401':
          description: not authorized
        '404':
          description: not found
    post:
      tags:
      - form
      summary: Create a form
      operationId: createForm
      parameters:
      - name: orgId
        in: path
        description: Org identifier (either id or slug)
        required: true
        schema:
          type: string
      responses:
        '201':
          description: form created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Form'
        '400':
          description: invalid data
        '401':
          description: not authorized
        '403':
          description: permission denied
        '404':
          description: org not found
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateForm'
        description: Form data to create
        required: true
  /v1/org/{orgId}/form/available:
    get:
      tags:
      - form
      summary: Return all active forms applicable to a particular entity
      operationId: getAvailableForms
      parameters:
      - name: orgId
        in: path
        description: Org identifier (either id or slug)
        required: true
        schema:
          type: string
      - name: targetId
        in: query
        description: Target id
        required: false
        schema:
          type: string
      - name: targetType
        in: query
        description: Target type
        required: false
        schema:
          type: string
          enum:
          - NONE
          - PERSON
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResultsFormSummary'
        '400':
          description: bad request
        '401':
          description: not authorized
        '404':
          description: not found
  /v1/org/{orgId}/form/delete:
    delete:
      tags:
      - form
      summary: Delete forms
      operationId: deleteForms
      parameters:
      - name: orgId
        in: path
        description: Org identifier (either id or slug)
        required: true
        schema:
          type: string
      responses:
        '204':
          description: forms deleted
        '400':
          description: invalid data
        '401':
          description: not authorized
        '403':
          description: permission denied
        '404':
          description: not found
      requestBody:
        content:
          application/json:
            schema:
              type: array
              items:
                type: string
                example: 588f7ee98f138b19220041a7
        description: Form ids
        required: true
  /v1/org/{orgId}/form/person/{personId}:
    get:
      tags:
      - form
      summary: Return all active forms applicable to a particular person
      operationId: findFormsForPerson
      parameters:
      - name: orgId
        in: path
        description: Org identifier (either id or slug)
        required: true
        schema:
          type: string
      - name: personId
        in: path
        description: Person id
        required: true
        schema:
          type: string
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResultsForm'
        '400':
          description: bad request
        '401':
          description: not authorized
        '404':
          description: not found
  /v1/org/{orgId}/form/status:
    post:
      tags:
      - form
      summary: Update status for existing forms
      operationId: updateFormStatus
      parameters:
      - name: orgId
        in: path
        description: Org identifier (either id or slug)
        required: true
        schema:
          type: string
      responses:
        '200':
          description: form status updated
        '400':
          description: invalid data
        '401':
          description: not authorized
        '403':
          description: permission denied
        '404':
          description: not found
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/FormStatusUpdateRequest'
        description: Form data to update
        required: true
  /v1/org/{orgId}/form/{formId}:
    get:
      tags:
      - form
      summary: Return a particular form by id
      operationId: getForm
      parameters:
      - name: orgId
        in: path
        description: Org identifier (either id or slug)
        required: true
        schema:
          type: string
      - name: formId
        in: path
        description: Form id
        required: true
        schema:
          type: string
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Form'
        '400':
          description: bad request
        '404':
          description: not found
    patch:
      tags:
      - form
      summary: Update an existing form
      operationId: updateForm
      parameters:
      - name: orgId
        in: path
        description: Org identifier (either id or slug)
        required: true
        schema:
          type: string
      - name: formId
        in: path
        description: Form id
        required: true
        schema:
          type: string
      responses:
        '204':
          description: form updated
        '400':
          description: invalid data
        '401':
          description: not authorized
        '403':
          description: permission denied
        '404':
          description: not found
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateForm'
        description: Form data to update
        required: true
    delete:
      tags:
      - form
      summary: Delete a form
      operationId: deleteForm
      parameters:
      - name: orgId
        in: path
        description: Org identifier (either id or slug)
        required: true
        schema:
          type: string
      - name: formId
        in: path
        description: Form id
        required: true
        schema:
          type: string
      responses:
        '204':
          description: form deleted
        '400':
          description: invalid data
        '401':
          description: not authorized
        '403':
          description: permission denied
        '404':
          description: not found
    post:
      tags:
      - form
      summary: Submit data from a form
      operationId: legacySubmitForm
      parameters:
      - name: orgId
        in: path
        description: Org identifier (either id or slug)
        required: true
        schema:
          type: string
      - name: formId
        in: path
        description: Org id
        required: true
        schema:
          type: string
      responses:
        '204':
          description: form submitted
        '400':
          description: invalid data
        '401':
          description: not authorized
        '403':
          description: permission denied
        '404':
          description: org not found
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/FormSubmitRequest'
        description: Form data to submit
        required: true
  /v1/org/{orgId}/form/{formId}/collect:
    post:
      tags:
      - form
      summary: Collect data for an existing form, sending emails and chat notifications to people being requested
      operationId: collectFormData
      parameters:
      - name: orgId
        in: path
        description: Org identifier (either id or slug)
        required: true
        schema:
          type: string
      - name: formId
        in: path
        description: Form id
        required: true
        schema:
          type: string
      responses:
        '201':
          description: form collection started
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FormCollectionResponse'
        '400':
          description: invalid data
        '401':
          description: not authorized
        '403':
          description: permission denied
        '404':
          description: org not found
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/FormCollectRequest'
        description: Details on the data collection
  /v1/org/{orgId}/form/{formId}/draft:
    get:
      tags:
      - form
      summary: Get the current state of form draft data
      operationId: getFormDraft
      parameters:
      - name: orgId
        in: path
        description: Org identifier (either id or slug)
        required: true
        schema:
          type: string
      - name: formId
        in: path
        description: Form id
        required: true
        schema:
          type: string
      - name: personId
        in: query
        description: Person id
        required: false
        schema:
          type: string
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PartialFormDraft'
        '400':
          description: invalid data
        '401':
          description: not authorized
        '403':
          description: permission denied
        '404':
          description: org not found
  /v1/org/{orgId}/form/{formId}/duplicate:
    post:
      tags:
      - form
      summary: Duplicate a form
      operationId: duplicateForm
      parameters:
      - name: orgId
        in: path
        description: Org identifier (either id or slug)
        required: true
        schema:
          type: string
      - name: formId
        in: path
        description: Form id to duplicate
        required: true
        schema:
          type: string
      responses:
        '201':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Form'
        '400':
          description: invalid data
        '403':
          description: permission denied
        '404':
          description: not found
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DuplicateFormOptions'
        description: Form duplication options
        required: true
  /v1/org/{orgId}/form/{formId}/preview-render:
    post:
      tags:
      - form
      summary: Render a preview of a form
      operationId: renderPreviewForm
      parameters:
      - name: orgId
        in: path
        description: Org identifier (either id or slug)
        required: true
        schema:
          type: string
      - name: formId
        in: path
        description: Form id
        required: true
        schema:
          type: string
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FormRender'
        '400':
          description: bad request
        '401':
          description: not authorized
        '404':
          description: not found
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/FormPreviewRenderRequest'
        required: true
  /v1/org/{orgId}/form/{formId}/remind:
    post:
      tags:
      - form
      summary: Sends reminder for a form with existing tasks, sending emails/chat notifications to people being requested
      operationId: remindFormData
      parameters:
      - name: orgId
        in: path
        description: Org identifier (either id or slug)
        required: true
        schema:
          type: string
      - name: formId
        in: path
        description: Form id
        required: true
        schema:
          type: string
      responses:
        '201':
          description: form reminder started
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Process'
        '400':
          description: invalid data
        '401':
          description: not authorized
        '403':
          description: permission denied
        '404':
          description: org not found
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/FormCollectRequest'
        description: Details on the data collection
  /v1/org/{orgId}/form/{formId}/render:
    get:
      tags:
      - form
      summary: Render a form for display
      operationId: renderForm
      parameters:
      - name: orgId
        in: path
        description: Org identifier (either id or slug)
        required: true
        schema:
          type: string
      - name: formId
        in: path
        description: Form id
        required: true
        schema:
          type: string
      - name: targetId
        in: query
        description: Target id
        required: false
        schema:
          type: string
      - name: targetType
        in: query
        description: Target type
        required: false
        schema:
          type: string
          enum:
          - NONE
          - PERSON
      - name: formResponseId
        in: query
        description: Form response id, if editing a prior form response
        required: false
        schema:
          type: string
      - name: formResponseChangeId
        in: query
        description: Form response change id, if editing a prior form response (deprecated)
        required: false
        schema:
          type: string
      - name: formVersionId
        in: query
        description: Form version id, if rendering a previous version of the form
        required: false
        schema:
          type: string
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FormRender'
        '400':
          description: bad request
        '401':
          description: not authorized
        '404':
          description: not found
  /v1/org/{orgId}/form/{formId}/rerender/question/{updateQuestionId}:
    post:
      tags:
      - form
      summary: Re-render form blocks based on changes to the form values
      operationId: rerenderForm
      parameters:
      - name: orgId
        in: path
        description: Org identifier (either id or slug)
        required: true
        schema:
          type: string
      - name: formId
        in: path
        description: Form id
        required: true
        schema:
          type: string
      - name: updateQuestionId
        in: path
        description: The question id that is being updated to trigger the re-render
        required: true
        schema:
          type: string
      - name: targetId
        in: query
        description: Target id
        required: false
        schema:
          type: string
      - name: targetType
        in: query
        description: Target type
        required: false
        schema:
          type: string
          enum:
          - NONE
          - PERSON
      - name: formVersionId
        in: query
        description: Form version id, if rendering a previous version of the form
        required: false
        schema:
          type: string
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FormRerender'
        '400':
          description: bad request
        '401':
          description: not authorized
        '404':
          description: not found
      requestBody:
        content:
          application/json:
            schema:
              type: object
              additionalProperties:
                type: object
        description: Form data to submit
        required: true
  /v1/org/{orgId}/form/{formId}/submit:
    post:
      tags:
      - form
      summary: Submit data from a form
      operationId: submitForm
      parameters:
      - name: orgId
        in: path
        description: Org identifier (either id or slug)
        required: true
        schema:
          type: string
      - name: formId
        in: path
        description: Form id
        required: true
        schema:
          type: string
      - name: targetId
        in: query
        description: Target id
        required: false
        schema:
          type: string
      - name: targetType
        in: query
        description: Target type
        required: false
        schema:
          type: string
          enum:
          - NONE
          - PERSON
      responses:
        '204':
          description: form submitted
        '400':
          description: invalid data
        '401':
          description: not authorized
        '403':
          description: permission denied
        '404':
          description: org not found
      requestBody:
        content:
          application/json:
            schema:
              type: object
              additionalProperties:
                type: object
        description: Form data to submit
        required: true
  /v1/org/{orgId}/form/{formId}/submit/draft:
    post:
      tags:
      - form
      summary: Submit data from a form draft
      operationId: submitFormDraft
      parameters:
      - name: orgId
        in: path
        description: Org identifier (either id or slug)
        required: true
        schema:
          type: string
      - name: formId
        in: path
        description: Form id
        required: true
        schema:
          type: string
      - name: targetId
        in: query
        description: Target id
        required: false
        schema:
          type: string
      - name: targetType
        in: query
        description: Target type
        required: false
        schema:
          type: string
          enum:
          - NONE
          - PERSON
      responses:
        '201':
          description: form draft submitted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FormDraft'
        '400':
          description: invalid data
        '401':
          description: not authorized
        '403':
          description: permission denied
        '404':
          description: org not found
      requestBody:
        content:
          application/json:
            schema:
              type: object
              additionalProperties:
                type: object
        description: Form data to submit
        required: true
components:
  schemas:
    FormSummary:
      type: object
      required:
      - id
      - label
      - displayName
      properties:
        id:
          type: string
          example: 588f7ee98f138b19220041a7
        label:
          type: string
        displayName:
          type: string
        displayNameTr:
          $ref: '#/components/schemas/Translations'
    FormStatusUpdateRequest:
      type: object
      required:
      - updateStatus
      - formIds
      properties:
        updateStatus:
          type: string
          description: New status to update
          enum:
          - ACTIVE
          - INACTIVE
          - ARCHIVED
        formIds:
          type: array
          description: Form ids
          items:
            type: string
            example: 588f7ee98f138b19220041a7
    PartialFormDraft:
      type: object
      properties:
        id:
          type: string
          description: globally unique id
          example: 588f7ee98f138b19220041a7
        orgId:
          type: string
          description: parent organization id
          example: 588f7ee98f138b19220041a7
        formId:
          type: string
          description: form being submitted
          example: 588f7ee98f138b19220041a7
        personId:
          type: string
          description: person form is being filled out on
          example: 588f7ee98f138b19220041a7
        data:
          type: object
          description: draft submission data - map of field names to data
          additionalProperties:
            type: object
        createId:
          type: string
          description: created by user id
          example: 588f7ee98f138b19220041a7
        createBehalfId:
          type: string
          description: created on behalf of user id
          example: 588f7ee98f138b19220041a7
        createAttribution:
          $ref: '#/components/schemas/Attribution'
        createAt:
          type: string
          description: created timestamp
          example: '2017-01-24T13:57:52Z'
        updateId:
          type: string
          description: last updated by user id
          example: 588f7ee98f138b19220041a7
        updateBehalfId:
          type: string
          description: last updated on behalf of user id
          example: 588f7ee98f138b19220041a7
        updateAttribution:
          $ref: '#/components/schemas/Attribution'
        updateAt:
          type: string
          description: last updated timestamp
          example: '2017-01-24T13:57:52Z'
        pendingApprovalChangeId:
          type: string
          example: 588f7ee98f138b19220041a7
        format:
          type: string
          description: whether the draft is using extended-json format for data storage
          enum:
          - EXTENDED_JSON
          - LEGACY
    FormRender:
      type: object
      required:
      - id
      - label
      - displayName
      - options
      - blocks
      - rerenderQuestionIds
      - responseSensitive
      properties:
        id:
          type: string
          example: 588f7ee98f138b19220041a7
        label:
          type: string
        displayName:
          type: string
        displayNameTr:
          $ref: '#/components/schemas/Translations'
        options:
          $ref: '#/components/schemas/FormOptions'
        blocks:
          type: array
          items:
            $ref: '#/components/schemas/FormRenderBlock'
        rerenderQuestionIds:
          type: array
          uniqueItems: true
          items:
            type: string
            example: 588f7ee98f138b19220041a7
        responseSensitive:
          type: string
          enum:
          - GLOBAL
          - ORG
          - SENSITIVE
          - PERSONAL
          - MANAGER
          - HIGH
          - PRIVATE
        authorSensitive:
          type: string
          enum:
          - ANONYMOUS
          - PRIVATE
          - HIGH
          - MANAGER
        ai:
          $ref: '#/components/schemas/FormAiConfig'
        formVersionId:
          type: string
          example: 588f7ee98f138b19220041a7
    FormRenderBlock:
      type: object
      required:
      - type
      - id
      properties:
        type:
          type: string
          enum:
          - QUESTION
          - CONTENT
        id:
          type: string
          example: 588f7ee98f138b19220041a7
        name:
          type: string
        question:
          type: string
        questionTr:
          $ref: '#/components/schemas/Translations'
        dataType:
          type: string
          enum:
          - ADDRESS
          - AUDIO
          - BOOLEAN
          - COMP
          - COMPOUND
          - COMP_BAND
          - CONTACTS
          - CURRENCY
          - DATE
          - DECIMAL
          - ELAPSED_DAYS
          - ELAPSED_MONTHS
          - ELAPSED_YEARS
          - EMAIL
          - ENUM
          - ENUM_EXPR
          - ENUM_MULTI
          - ENUM_SCALE
          - EXPR
          - FILE
          - GROUP
          - GROUPS
          - GROUP_ASSIGNMENTS
          - GROUP_TYPE
          - GROUP_POSITION_ASSIGNMENTS
          - IMAGE
          - INTEGER
          - JOB
          - JOB_CODE
          - JOBS
          - JOB_TIER
          - LIST
          - MAP
          - MONEY
          - NAME
          - OBJECT
          - PAY_INTERVAL
          - PERCENT
          - PERSON
          - PERSONS
          - PHONE
          - STOCKGRANT
          - STRING
          - TABLE_REF
          - TEXT
          - TIMEOFF
          - TIMESTAMP
          - TRACKED_GROUP
          - URL
          - USER
          - VARIABLE_COMP
          - VARIABLE_COMPS
        plural:
          type: string
          enum:
          - SINGLE
          - LIST
          - SET
        values:
          type: array
          items:
            $ref: '#/components/schemas/EnumValue'
        options:
          $ref: '#/components/schemas/FieldOptions'
        value:
          type: object
        required:
          type: boolean
        content:
          type: string
        contentTr:
          $ref: '#/components/schemas/Translations'
        label:
          type: string
    EnumValue:
      type: object
      required:
      - name
      - label
      properties:
        name:
          type: string
          description: enum value name
        label:
          type: string
          description: enum value label
        color:
          type: string
          description: color of property
          pattern: ^#[a-f0-9]{6}$
        expr:
          type: string
          description: computed expression, for ENUM_EXPR type
        num:
          type: number
          description: numeric value, for ENUM_SCALE type
        sort:
          type: integer
          format: int32
          description: sort order
        rank:
          type: integer
          format: int32
          description: rank order, if selected in rank order
        id:
          type: string
          description: unique identifier for enum
          example: 588f7ee98f138b19220041a7
        labelTr:
          description: translations for the label
          $ref: '#/components/schemas/Translations'
    ShareAccess:
      type: object
      required:
      - access
      properties:
        access:
          type: string
          description: access permission level
          enum:
          - NONE
          - LIMITED_READ
          - LIMITED_WRITE
          - STANDARD_READ
          - STANDARD_WRITE
          - COMPENSATION_READ
          - FULL_READ
          - COMP_PLANNING_PARTICIPANT
          - COMPENSATION_WRITE
          - WRITE
          - COMPENSATION_OWNER
          - OWNER
        userId:
          type: string
          description: user id
          example: 5887a7718f138b6a2a0041a7
        groupId:
          type: string
          description: group id
          example: 5887a7718f138b6a2a0041a7
        fields:
          type: string
          description: fields
          example: name,image,title
    ResultsForm:
      type: object
      required:
      - data
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/Form'
        next:
          type: string
        access:
          type: array
          items:
            $ref: '#/components/schemas/ResultsAccess'
    FormDraft:
      type: object
      required:
      - id
      - orgId
      - formId
      - data
      - createId
      - createAt
      - updateId
      - updateAt
      properties:
        id:
          type: string
          description: globally unique id
          example: 588f7ee98f138b19220041a7
        orgId:
          type: string
          description: parent organization id
          example: 588f7ee98f138b19220041a7
        formId:
          type: string
          description: form being submitted
          example: 588f7ee98f138b19220041a7
        personId:
          type: string
          description: person form is being filled out on
          example: 588f7ee98f138b19220041a7
        data:
          type: object
          description: draft submission data - map of field names to data
          additionalProperties:
            type: object
        createId:
          type: string
          description: created by user id
          example: 588f7ee98f138b19220041a7
        createBehalfId:
          type: string
          description: created on behalf of user id
          example: 588f7ee98f138b19220041a7
        createAttribution:
          $ref: '#/components/schemas/Attribution'
        createAt:
          type: string
          description: created timestamp
          example: '2017-01-24T13:57:52Z'
        updateId:
          type: string
          description: last updated by user id
          example: 588f7ee98f138b19220041a7
        updateBehalfId:
          type: string
          description: last updated on behalf of user id
          example: 588f7ee98f138b19220041a7
        updateAttribution:
          $ref: '#/components/schemas/Attribution'
        updateAt:
          type: string
          description: last updated timestamp
          example: '2017-01-24T13:57:52Z'
        pendingApprovalChangeId:
          type: string
          example: 588f7ee98f138b19220041a7
        format:
          type: string
          description: whether the draft is using extended-json format for data storage
          enum:
          - EXTENDED_JSON
          - LEGACY
    DuplicateFormOptions:
      type: object
      required:
      - unlinkFields
      properties:
        unlinkFields:
          type: boolean
        unlinkQuestionIds:
          type: array
          uniqueItems: true
          items:
            type: string
            example: 588f7ee98f138b19220041a7
    Task:
      type: object
      required:
      - id
      - orgId
      - userId
      - type
      - entityId
      - status
      properties:
        id:
          type: string
          description: globally unique id
          example: 588f7ee98f138b19220041a7
        orgId:
          type: string
          description: parent organization id
          example: 588f7ee98f138b19220041a7
        userId:
          type: string
          description: user who is responsible for the task
          example: 588f7ee98f138b19220041a7
        assessmentId:
          type: string
          description: parent assessment id that this task belongs to
          example: 588f7ee98f138b19220041a7
        parentEntityId:
          type: string
          description: parent entity id that this task belongs to, should be used with entityId
          example: 588f7ee98f138b19220041a7
        type:
          type: string
          description: type of task
          enum:
          - FORM_SUBMIT
          - FORM_RESPONSE_APPROVE

# --- truncated at 32 KB (75 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/charthop/refs/heads/main/openapi/charthop-form-api-openapi.yml