HeyForm GraphQL API

Primary data API (GraphQL over HTTP)

OpenAPI Specification

heyform-graphql-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: HeyForm Auth GraphQL API
  description: HeyForm is an open-source conversational form builder providing REST and GraphQL endpoints for managing forms, submissions, workspaces, integrations, and webhooks. The primary data API uses GraphQL; this document covers the publicly accessible REST endpoints discovered in the open-source codebase.
  version: 1.0.0
  contact:
    name: HeyForm Support
    url: https://docs.heyform.net
  license:
    name: AGPL-3.0
    url: https://github.com/heyform/heyform/blob/main/LICENSE
servers:
- url: https://api.heyform.net
  description: HeyForm Cloud API
- url: http://localhost:8000
  description: Self-hosted HeyForm instance (default port)
tags:
- name: GraphQL
  description: Primary data API (GraphQL over HTTP)
paths:
  /graphql:
    post:
      operationId: graphqlEndpoint
      summary: GraphQL API endpoint
      description: 'The primary HeyForm data API. All form management operations (create, update, delete, publish), user operations (login, sign-up, password reset), submission retrieval, project management, team management, integration configuration, and the public form open/submit flow are handled through this GraphQL endpoint. Authentication uses HTTP-only cookies set during login. Key mutations and queries include: login, signUp, createForm, updateFormSchemas, publishForm, deleteForm, openForm, completeSubmission, submissions, deleteSubmission, createProject, createTeam, updateIntegrationSettings.'
      tags:
      - GraphQL
      security:
      - cookieAuth: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/GraphQLRequest'
            examples:
              openForm:
                summary: Open a published form (public)
                value:
                  query: "query openForm($input: OpenFormInput!) {\n  openForm(input: $input)\n}\n"
                  variables:
                    input:
                      formId: abc123xyz
              completeSubmission:
                summary: Submit answers to a form (public)
                value:
                  query: "mutation completeSubmission($input: CompleteSubmissionInput!) {\n  completeSubmission(input: $input) {\n    clientSecret\n  }\n}\n"
                  variables:
                    input:
                      formId: abc123xyz
                      openToken: eyJ...
                      answers:
                      - id: field1
                        value: Jane Doe
              login:
                summary: Authenticate with email and password
                value:
                  query: "query login($input: LoginInput!) {\n  login(input: $input)\n}\n"
                  variables:
                    input:
                      email: user@example.com
                      password: secret
              createForm:
                summary: Create a new form
                value:
                  query: "mutation createForm($input: CreateFormInput!) {\n  createForm(input: $input)\n}\n"
                  variables:
                    input:
                      projectId: proj123
                      name: Customer Feedback
      responses:
        '200':
          description: GraphQL response (errors are returned inline per the GraphQL spec)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GraphQLResponse'
components:
  schemas:
    GraphQLResponse:
      type: object
      properties:
        data:
          type: object
          description: The data returned by the GraphQL operation.
          additionalProperties: true
        errors:
          type: array
          description: Array of GraphQL errors, if any.
          items:
            type: object
            properties:
              message:
                type: string
              locations:
                type: array
                items:
                  type: object
                  properties:
                    line:
                      type: integer
                    column:
                      type: integer
              path:
                type: array
                items: {}
              extensions:
                type: object
                additionalProperties: true
    GraphQLRequest:
      type: object
      required:
      - query
      properties:
        query:
          type: string
          description: GraphQL query or mutation document.
        variables:
          type: object
          description: Variable values for the query.
          additionalProperties: true
        operationName:
          type: string
          description: Name of the operation to execute (when the document contains multiple).
  securitySchemes:
    cookieAuth:
      type: apiKey
      in: cookie
      name: heyform_sid
      description: Session cookie set by the login mutation or OAuth callback. All authenticated GraphQL mutations and the CSV export endpoint require this cookie.
externalDocs:
  description: HeyForm Documentation
  url: https://docs.heyform.net