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

> ## Agent Instructions
> Automate.ax automations are TypeScript programs.
> Use Bun for installation and command examples.
> Use Automate.ax for the product name and automate.ax for the package, CLI, and domain.
> Treat documented public APIs as current; do not invent transitional or deprecated names.

# Get form

> Retrieve a normalized Google Form with all items and settings.

`getForm` loads form metadata, publication state, settings, and every item. Use
it to discover stable item and question IDs before updating or routing answers.

## Example

```ts theme={null}
import { automation, onHttpRequest } from "automate.ax"
import { getForm } from "automate.ax/google-forms"

export default automation("Inspect an intake form", () => {
  onHttpRequest({ scope: "automation" })

  getForm({ form: "https://docs.google.com/forms/d/form-id/edit" })
})
```

## Inputs

`form: string` is required and accepts a form ID or standard Forms URL.
`account` optionally selects the Google account. Inputs accept compatible
signals.

## Output

```ts theme={null}
interface Form {
  formId: string
  title: string
  documentTitle?: string
  description?: string
  editUrl: string
  responderUrl?: string
  linkedSheetId?: string
  revisionId?: string
  settings: {
    emailCollection: "none" | "verified" | "respondentInput"
    isQuiz: boolean
  }
  publishSettings?: {
    isPublished: boolean
    isAcceptingResponses: boolean
  }
  items: Array<{
    itemId: string
    index: number
    title: string
    description?: string
    type:
      | "question"
      | "grid"
      | "pageBreak"
      | "text"
      | "image"
      | "video"
      | "unknown"
    questions: Array<{
      questionId: string
      type:
        | "shortText"
        | "paragraph"
        | "multipleChoice"
        | "checkbox"
        | "dropdown"
        | "scale"
        | "date"
        | "time"
        | "duration"
        | "rating"
        | "fileUpload"
        | "gridRow"
        | "unknown"
      required: boolean
      choices: string[]
      rowTitle?: string
      date?: { includeTime: boolean; includeYear: boolean }
      scale?: {
        low: number
        high: number
        lowLabel?: string
        highLabel?: string
      }
      rating?: { icon: string; levels: number }
      fileUpload?: {
        folderId?: string
        maxFileSizeBytes?: string
        maxFiles?: number
        types: string[]
      }
      grading?: Grading
    }>
  }>
}
```

`index` is zero-based, while item positions accepted by editing actions are
one-based. Keep immutable `itemId` and `questionId` values when order can change.
