> ## Documentation Index
> Fetch the complete documentation index at: https://formhug.ai/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# List the current user forms

> Returns the current user forms, paginated by cursor. The default ordering is
`created_at` descending; use the `sort` parameter to switch to another field.

**Required scope:** `form:read`.




## OpenAPI

````yaml /api-reference/openapi.yaml get /api/v1/forms
openapi: 3.0.1
info:
  title: FormHug API V1
  version: v1
  description: |
    FormHug public REST API. All request/response keys are snake_case.

    Successful response:

    ```json
    {
      "data": { ... }
    }
    ```

    Paginated response:

    ```json
    {
      "data": [ ... ],
      "pagination": {
        "total": 123,
        "next_cursor": "NQ=="
      }
    }
    ```

    Error response:

    ```json
    {
      "error": "Human-readable message",
      "error_details": [
        { "attribute": "field_name", "message": "specific error" }
      ]
    }
    ```

    `error_details` only appears for model validation failures.
servers:
  - url: https://formhug.ai
security: []
tags:
  - name: Forms
    description: Form CRUD
  - name: Attachments
    description: >-
      2-step upload for form-element images (theme, rich-text, or field-element
      images). Prepare returns an `upload_id`; consume it in a theme update,
      attachment_commitments, or the form `fields` payload depending on purpose.
  - name: Entries
    description: Entries collected by a form owned by the current user
  - name: Folders
    description: Folder CRUD
  - name: Participated Forms
    description: Forms the current user has submitted to (does not own)
  - name: Published Form Entries
    description: Submit entries to a published form
  - name: Published Forms
    description: Read a published form's public structure for filling
  - name: Entry Attachments
    description: >-
      2-step upload for `attachment` field submissions. Prepare returns an
      `upload_id`; submit it under the attachment field in `field_values` when
      creating the entry.
  - name: Me
    description: Current authenticated user
  - name: Webhooks
    description: Webhook integrations attached to a form
  - name: Form Themes
    description: Read and update a form's visual theme
  - name: Form Settings
    description: >-
      Per-form settings — submission flow, availability, access control,
      presentation
  - name: Field Rules
    description: >-
      Read and replace a form's conditional field-display and post-submission
      redirect rules.
  - name: OAuth
    description: OAuth 2.0 PKCE token issuance and revocation
paths:
  /api/v1/forms:
    get:
      tags:
        - Forms
      summary: List the current user forms
      description: >
        Returns the current user forms, paginated by cursor. The default
        ordering is

        `created_at` descending; use the `sort` parameter to switch to another
        field.


        **Required scope:** `form:read`.
      parameters:
        - name: name
          in: query
          required: false
          schema:
            type: string
          description: Case-insensitive substring match against name
        - name: folder_token
          in: query
          required: false
          schema:
            type: string
          description: >-
            Filter by folder; empty string means "desktop" (no folder); omit for
            no filter
        - name: sort
          in: query
          required: false
          schema:
            type: string
            enum:
              - created_at
              - updated_at
              - last_entry_created_at
            default: created_at
          description: Sort field; results are always returned in descending order
        - name: limit
          in: query
          required: false
          schema:
            type: integer
            default: 10
            maximum: 100
        - name: cursor
          in: query
          required: false
          schema:
            type: string
          description: >-
            Pagination cursor returned in the previous response as
            pagination.next_cursor
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: object
                required:
                  - data
                  - pagination
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/FormSummary'
                  pagination:
                    $ref: '#/components/schemas/Pagination'
        '400':
          description: Invalid sort value
          content:
            application/json:
              examples:
                invalid_sort:
                  value:
                    error: >-
                      Invalid sort: name. Allowed values: created_at,
                      updated_at, last_entry_created_at
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '401':
          description: Missing or invalid credentials
          content:
            application/json:
              examples:
                unauthenticated:
                  value:
                    error: Authentication failed
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
      security:
        - PersonalAccessToken:
            - form:read
components:
  schemas:
    FormSummary:
      type: object
      required:
        - name
        - description
        - token
        - scene
        - layout
        - created_at
        - updated_at
        - last_entry_created_at
        - entries_count
      properties:
        name:
          type: string
          example: Customer feedback
        description:
          type: string
          nullable: true
          example: Please share your feedback
        token:
          type: string
          example: Wabc12
        scene:
          type: string
          description: Form scene
          enum:
            - form
            - survey
            - exam
            - vote
            - registry
            - reservation
            - customer_acquisition
            - evaluation
            - online_payment
          example: survey
        layout:
          type: string
          description: Form layout
          enum:
            - classic
            - card
          example: classic
        created_at:
          type: string
          format: date-time
          example: '2026-05-12T08:00:00Z'
        updated_at:
          type: string
          format: date-time
          example: '2026-05-12T09:00:00Z'
        last_entry_created_at:
          type: string
          format: date-time
          nullable: true
          description: >-
            Timestamp of the most recent entry submitted to this form; null when
            the form has no entries yet
          example: '2026-05-13T10:00:00Z'
        entries_count:
          type: integer
          description: Number of submitted entries
          example: 42
    Pagination:
      type: object
      required:
        - total
        - next_cursor
      properties:
        total:
          type: integer
          description: Total number of records
          example: 123
        next_cursor:
          type: string
          nullable: true
          description: Opaque cursor for the next page; null when there are no more records
          example: NQ==
    ErrorEnvelope:
      type: object
      required:
        - error
      properties:
        error:
          type: string
          description: Error message
  securitySchemes:
    PersonalAccessToken:
      type: http
      scheme: bearer
      bearerFormat: PAT
      description: >
        Personal Access Token prefixed with `fh_`. Sent as `Authorization:
        Bearer fh_xxx`.

        The scope required by each endpoint is listed in that endpoint's
        description.

````