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

<AgentInstructions>

## Submitting Feedback

If you encounter incorrect, outdated, or confusing documentation on this page, submit feedback:

POST https://help.kajabi.com/feedback

```json
{
  "path": "/api-reference/forms/form-details",
  "feedback": "Description of the issue"
}
```

Only submit feedback when you have something specific and actionable to report.

</AgentInstructions>

# Form details

> Shows details of a form

Forms belong to a site and can be associated with:
* Landing pages
* Offers
* Email sequences
* Events
* Newsletters

## Form Attributes
* `title` (string) - A required field that represents the name or heading of the form. This is used to identify and display the form in the user interface. Forms must have a unique title within a site and can be searched and sorted by this attribute.
* `default` (boolean) - A boolean flag indicating whether this is the default form for the site. Each site can have one default form, which is typically used when no specific form is specified. The default form can be accessed using the special ID "default" in API calls. When true, this form is considered the site's primary contact form.
* `webhook_url` (string) - An optional URL where form submission data will be sent via webhook. This allows integration with external systems. The URL:
  * Must be a valid URL format
  * Cannot be a redirecting URL
  * Is automatically transformed and validated
  * Can be used to send form submission data to external services
* `created_at` (string) - Timestamp indicating when the form was created. This is automatically set when the form is first created.
* `updated_at` (string) - Timestamp indicating when the form was last modified. This is automatically updated whenever the form is changed.

## Include Related Resources
Use the `include` parameter to load related resources:
### Include fields, offer, contact_tags
* `GET /v1/forms/123?include=fields,offer,contact_tags`

Response will include the requested related resources
```json
{
  "data": {
    "id": "123",
    "type": "forms",
    "attributes": {
      "title": "Contact Form",
      "default": false,
      "webhook_url": null,
      "created_at": "2025-02-27T01:03:09.179Z",
      "updated_at": "2025-02-27T01:03:25.365Z"
    },
    "relationships": {
      "fields": {
        "data": [
          { "id": "456", "type": "fields" },
          { "id": "789", "type": "fields" }
        ]
      },
      "offer": {
        "data": { "id": "123", "type": "offers" }
      },
      "contact_tags": {
        "data": [
          { "id": "456", "type": "contact_tags" },
          { "id": "789", "type": "contact_tags" }
        ]
      }
    }
  },
  "included": [
    {
      "id": "456",
      "type": "fields", "attributes": { "name": "Name" }
    },
    {
      "id": "789",
      "type": "fields", "attributes": { "name": "Email" }
    },
    {
      "id": "123",
      "type": "offers", "attributes": { "name": "Offer A" }
    },
    {
      "id": "456",
      "type": "contact_tags", "attributes": { "name": "Tag A" }
    },
    {
      "id": "789",
      "type": "contact_tags", "attributes": { "name": "Tag B" }
    }
  ]
}
```
### Field Attributes
Fields are used in:
* Contact forms
* Offer forms
* Custom field sets
* Form submissions

The system maintains default fields like `name`, `email`, etc. that cannot be removed

* `title` (string) - The display name or label of the field. This is a required attribute that represents how the field will be shown to users in forms and interfaces. Aside from default fields, custom fields can have user-defined titles.
* `type` (string) - The type of field, which must be one of these predefined types:
  * `TextField` - Standard text input
  * `PhoneField` - Phone number input
  * `EmailField` - Email address input
  * `TextAreaField` - Multi-line text input
  * `CheckboxField` - Boolean checkbox
  * `SelectBoxField` - Dropdown select
  * `RadioButtonsField` - Radio button group
  * `CountryField` - Country selector
  * `MobilePhoneField` - Mobile phone input
* `required` (boolean) - A boolean indicating whether the field must be filled out. For default fields, this is set in the configuration, while custom fields can be marked as required or optional.
* `handle` (string) - A unique identifier for the field within a site.
  * A custom handle in the format custom_N where N is a number from 1 to 150
  * The handle is used to reference the field in code and templates.
* `select_options` (string) - For fields that have choices (`SelectBoxField`, `RadioButtonsField`), this contains the available options. The options are stored as newline-separated values and must be unique within the field.
* `editable` (boolean) - A boolean indicating whether the field can be modified. Default fields typically have this set to false, while custom fields can be editable.
* `created_at` (string) - Timestamp when the field was created.
* `updated_at` (string) - Timestamp when the field was last updated.

## Sparse Fields
Use the `fields[forms]` parameter to request only specific attributes:
### Only return title and webhook_url attributes
* `GET /v1/forms/123?fields[forms]=title,webhook_url`

Response will only include requested fields
```json
{
  "data": [{
    "id": "123",
    "type": "forms",
    "attributes": {
      "title": "Contact Form A",
      "webhook_url": "https://example.com/webhook"
    }
  }]
}
```
## Using Multiple Parameters Together
You can combine include and sparse fields in a single request:
### Include fields (only name attribute) and only return title and webhook_url attributes
* `GET /v1/forms/123?include=fields&fields[forms]=title,webhook_url&&fields[fields]=title`

Response will include related fields with sparse fields
```json
{
  "data": {
    "id": "123",
    "type": "forms",
    "attributes": {
      "title": "Contact Form A",
      "webhook_url": "https://example.com/webhook"
    },
    "relationships": {}
  },
  "included": [
    {
      "id": "456",
      "type": "fields",
      "attributes": {
        "title": "Name"
      }
    },
    {
      "id": "789",
      "type": "fields",
      "attributes": {
        "title": "Email"
      }
    }
  ]
}
```




## OpenAPI

````yaml /openapi.yaml get /v1/forms/{id}
openapi: 3.1.1
info:
  title: Kajabi API V1
  version: 1.0.1
  description: >
    ## Public API

    * Server URL `https://api.kajabi.com`

    * Endpoint paths are prefixed with `/v1`

    * Version endpoint `GET https://api.kajabi.com/v1/version`

    * See the [Developers Site](https://developers.kajabi.com) for documentation
    and examples.

    * Try the demo [Postman
    collection](https://www.postman.com/kajabi-apis/beta-public-api-demo/collection/fg4iyaz/kajabi-public-api-v1)

    ## API Keys

    * Your API `client_id` and `client_secret` are available on the [User API
    Keys](https://app.kajabi.com/admin/settings/security) section of the Kajabi
    Admin Portal.
      * Custom API Keys can be created with specific permissions.
      * Click the "Create User API Key" button, enter a name (e.g. "My project"), select the user and permissions, and click "Create".
      * For security purposes, you may "Delete" or "Rotate" the api credentials at any time; which will invalidate any access tokens granted with the credentials.
    ## Video Walkthroughs

    *
    [Capabilities](https://drive.google.com/file/d/1Puc9B2sSdA-RQb7YMxmUXg4FVoEXytoc/view?usp=sharing)

    * [Getting
    Started](https://drive.google.com/file/d/1hbGRShkxven_QMWvgYrerHKURbcZrnvJ/view?usp=sharing)

    * [Error
    Examples](https://drive.google.com/file/d/1i0wQK71I1jpaZVsxYwsn62gVj40S_E7Y/view?usp=sharing)

    * [External Contact
    Form](https://drive.google.com/file/d/1HqpULXvan5TOK3LvM7nILCuCkCaX0kFT/view?usp=sharing)
  contact:
    email: support@kajabi.com
    name: Support
    url: >-
      https://help.kajabi.com/hc/en-us/articles/4404549690523-How-to-Get-Help-From-Kajabi-Live-Agents
  license:
    name: Apache 2.0
    url: http://www.apache.org/licenses/LICENSE-2.0.html
servers:
  - url: https://api.kajabi.com
    description: Production
security: []
paths:
  /v1/forms/{id}:
    get:
      tags:
        - Forms
      summary: Form details
      description: >
        Shows details of a form


        Forms belong to a site and can be associated with:

        * Landing pages

        * Offers

        * Email sequences

        * Events

        * Newsletters


        ## Form Attributes

        * `title` (string) - A required field that represents the name or
        heading of the form. This is used to identify and display the form in
        the user interface. Forms must have a unique title within a site and can
        be searched and sorted by this attribute.

        * `default` (boolean) - A boolean flag indicating whether this is the
        default form for the site. Each site can have one default form, which is
        typically used when no specific form is specified. The default form can
        be accessed using the special ID "default" in API calls. When true, this
        form is considered the site's primary contact form.

        * `webhook_url` (string) - An optional URL where form submission data
        will be sent via webhook. This allows integration with external systems.
        The URL:
          * Must be a valid URL format
          * Cannot be a redirecting URL
          * Is automatically transformed and validated
          * Can be used to send form submission data to external services
        * `created_at` (string) - Timestamp indicating when the form was
        created. This is automatically set when the form is first created.

        * `updated_at` (string) - Timestamp indicating when the form was last
        modified. This is automatically updated whenever the form is changed.


        ## Include Related Resources

        Use the `include` parameter to load related resources:

        ### Include fields, offer, contact_tags

        * `GET /v1/forms/123?include=fields,offer,contact_tags`


        Response will include the requested related resources

        ```json

        {
          "data": {
            "id": "123",
            "type": "forms",
            "attributes": {
              "title": "Contact Form",
              "default": false,
              "webhook_url": null,
              "created_at": "2025-02-27T01:03:09.179Z",
              "updated_at": "2025-02-27T01:03:25.365Z"
            },
            "relationships": {
              "fields": {
                "data": [
                  { "id": "456", "type": "fields" },
                  { "id": "789", "type": "fields" }
                ]
              },
              "offer": {
                "data": { "id": "123", "type": "offers" }
              },
              "contact_tags": {
                "data": [
                  { "id": "456", "type": "contact_tags" },
                  { "id": "789", "type": "contact_tags" }
                ]
              }
            }
          },
          "included": [
            {
              "id": "456",
              "type": "fields", "attributes": { "name": "Name" }
            },
            {
              "id": "789",
              "type": "fields", "attributes": { "name": "Email" }
            },
            {
              "id": "123",
              "type": "offers", "attributes": { "name": "Offer A" }
            },
            {
              "id": "456",
              "type": "contact_tags", "attributes": { "name": "Tag A" }
            },
            {
              "id": "789",
              "type": "contact_tags", "attributes": { "name": "Tag B" }
            }
          ]
        }

        ```

        ### Field Attributes

        Fields are used in:

        * Contact forms

        * Offer forms

        * Custom field sets

        * Form submissions


        The system maintains default fields like `name`, `email`, etc. that
        cannot be removed


        * `title` (string) - The display name or label of the field. This is a
        required attribute that represents how the field will be shown to users
        in forms and interfaces. Aside from default fields, custom fields can
        have user-defined titles.

        * `type` (string) - The type of field, which must be one of these
        predefined types:
          * `TextField` - Standard text input
          * `PhoneField` - Phone number input
          * `EmailField` - Email address input
          * `TextAreaField` - Multi-line text input
          * `CheckboxField` - Boolean checkbox
          * `SelectBoxField` - Dropdown select
          * `RadioButtonsField` - Radio button group
          * `CountryField` - Country selector
          * `MobilePhoneField` - Mobile phone input
        * `required` (boolean) - A boolean indicating whether the field must be
        filled out. For default fields, this is set in the configuration, while
        custom fields can be marked as required or optional.

        * `handle` (string) - A unique identifier for the field within a site.
          * A custom handle in the format custom_N where N is a number from 1 to 150
          * The handle is used to reference the field in code and templates.
        * `select_options` (string) - For fields that have choices
        (`SelectBoxField`, `RadioButtonsField`), this contains the available
        options. The options are stored as newline-separated values and must be
        unique within the field.

        * `editable` (boolean) - A boolean indicating whether the field can be
        modified. Default fields typically have this set to false, while custom
        fields can be editable.

        * `created_at` (string) - Timestamp when the field was created.

        * `updated_at` (string) - Timestamp when the field was last updated.


        ## Sparse Fields

        Use the `fields[forms]` parameter to request only specific attributes:

        ### Only return title and webhook_url attributes

        * `GET /v1/forms/123?fields[forms]=title,webhook_url`


        Response will only include requested fields

        ```json

        {
          "data": [{
            "id": "123",
            "type": "forms",
            "attributes": {
              "title": "Contact Form A",
              "webhook_url": "https://example.com/webhook"
            }
          }]
        }

        ```

        ## Using Multiple Parameters Together

        You can combine include and sparse fields in a single request:

        ### Include fields (only name attribute) and only return title and
        webhook_url attributes

        * `GET
        /v1/forms/123?include=fields&fields[forms]=title,webhook_url&&fields[fields]=title`


        Response will include related fields with sparse fields

        ```json

        {
          "data": {
            "id": "123",
            "type": "forms",
            "attributes": {
              "title": "Contact Form A",
              "webhook_url": "https://example.com/webhook"
            },
            "relationships": {}
          },
          "included": [
            {
              "id": "456",
              "type": "fields",
              "attributes": {
                "title": "Name"
              }
            },
            {
              "id": "789",
              "type": "fields",
              "attributes": {
                "title": "Email"
              }
            }
          ]
        }

        ```
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
        - name: include
          in: query
          required: false
          description: >-
            Load the related resources, for example
            ?include=fields,site,offer,contact_tags
          schema:
            type: string
        - name: fields[forms]
          in: query
          required: false
          description: >-
            Partial attributes as specified, e.g.
            fields[forms]=title,webhook_url
          schema:
            type: string
      responses:
        '200':
          description: Success, shows details of a form
          content:
            application/vnd.api+json:
              schema:
                $ref: '#/components/schemas/forms_show_response'
        '401':
          description: Unauthorized, Authorization header is missing or invalid
          content:
            application/vnd.api+json:
              schema:
                $ref: '#/components/schemas/errors_unauthorized'
        '403':
          description: Forbidden, insufficient permission to access the resource
          content:
            application/vnd.api+json:
              schema:
                $ref: '#/components/schemas/errors_forbidden'
        '404':
          description: form not found
          content:
            application/vnd.api+json:
              schema:
                $ref: '#/components/schemas/errors_not_found'
      security:
        - Bearer: []
components:
  schemas:
    forms_show_response:
      type: object
      properties:
        data:
          type: object
          properties:
            id:
              type: string
            type:
              type: string
              enum:
                - forms
            attributes:
              $ref: '#/components/schemas/form_attributes'
            relationships:
              type: object
              properties:
                site:
                  type: object
                  properties:
                    data:
                      $ref: '#/components/schemas/resource_identifier'
                offer:
                  type: object
                  properties:
                    data:
                      $ref: '#/components/schemas/resource_identifier'
                fields:
                  type: object
                  properties:
                    data:
                      $ref: '#/components/schemas/resource_identifiers'
    errors_unauthorized:
      type: object
      properties:
        errors:
          type: array
          items:
            $ref: '#/components/schemas/errors_attributes'
    errors_forbidden:
      type: object
      properties:
        errors:
          type: array
          items:
            $ref: '#/components/schemas/errors_attributes'
    errors_not_found:
      type: object
      properties:
        errors:
          type: array
          items:
            $ref: '#/components/schemas/errors_attributes'
    form_attributes:
      type: object
      properties:
        title:
          type:
            - string
            - 'null'
        default:
          type: boolean
        webhook_url:
          type: object
          nullable: true
        url:
          type: string
        created_at:
          type: string
          format: date-time
          nullable: true
          readOnly: true
          description: ISO 8601 date-time, read only
        updated_at:
          type: string
          format: date-time
          nullable: true
          readOnly: true
          description: ISO 8601 date-time, read only
    resource_identifier:
      type: object
      properties:
        id:
          type: string
        type:
          type: string
      required:
        - id
        - type
    resource_identifiers:
      type: array
      items:
        $ref: '#/components/schemas/resource_identifier'
    errors_attributes:
      type: object
      properties:
        status:
          type: string
        source:
          type: object
          nullable: true
          properties:
            pointer:
              type: string
        title:
          type: string
        detail:
          type: string
  securitySchemes:
    Bearer:
      type: http
      scheme: bearer

````