# Fillout

> Read Fillout forms and their submissions, record and delete submissions, and manage the webhooks that announce new responses.

App · Forms & Surveys · 8 actions · 2 triggers. Web page: https://docs.lodol.com/docs/integrations/fillout

## Triggers

Start a workflow when something happens in Fillout. See [how triggers work](https://docs.lodol.com/docs/concepts/triggers.md).

### New submission

Runs when a Fillout form receives a completed response.

**Filters**: Narrow which events start a run.

- `form_id` (required)
- `search`

**Event fields**: What a run starts with. Later steps read each field with an @ reference.

- `form_id` (text)
- `submission_id` (text)
- `submitted_at` (text)
- `last_updated_at` (text)
- `edit_link` (text)
- `answers` (object)
- `questions` (list)
- `calculations` (list)
- `url_parameters` (list)
- `scheduling` (list)
- `payments` (list)
- `quiz_score` (number)
- `quiz_max_score` (number)
- `login_email` (text)

### Submission updated

Runs when a response to a Fillout form is edited.

**Filters**: Narrow which events start a run.

- `form_id` (required)
- `search`

**Event fields**: What a run starts with. Later steps read each field with an @ reference.

- `form_id` (text)
- `submission_id` (text)
- `submitted_at` (text)
- `last_updated_at` (text)
- `edit_link` (text)
- `answers` (object)
- `questions` (list)
- `calculations` (list)
- `url_parameters` (list)
- `scheduling` (list)
- `payments` (list)
- `quiz_score` (number)
- `quiz_max_score` (number)
- `login_email` (text)

## Actions

### Create a submission

Record a submission against a form without going through the form itself: useful for importing responses collected elsewhere.

**Inputs**

- Form ID (`form_id`, text, required): The ID of the form, as returned by List forms. It's also the last part of the form's public URL.
- Answers (`answers`, object, required): The answers to record, keyed by question ID -- for example {"kj4Q": "Ada Lovelace"}. Use Get a form to look up the question IDs.
- URL parameters (`url_parameters`, object): Optional. Tracking values to record alongside the answers, keyed by URL parameter ID -- for example {"utm_source": "newsletter"}. Use Get a form to look up the IDs.
- Submitted at (`submitted_at`, date and time): Optional. When the response was originally collected. Defaults to now.
- Last updated at (`last_updated_at`, date and time): Optional. When the response was last changed. Defaults to the submitted time.

**Outputs**

- `answers` (object): The answers keyed by question text -- for example {'Email': 'ada@example.com'}. The quickest way to read one known answer.
- `calculations` (list): What the form's calculations worked out for this submission
- `edit_link` (text): A link that reopens this submission for editing. Empty unless the action was asked to include it.
- `last_updated_at` (text): When the submission was last changed
- `login_email` (text): The verified email address, when the form is behind a login page
- `payments` (list): Payments taken through the form's Fillout Payments fields
- `questions` (list): Every answer in form order, with the question IDs needed to write a submission back
- `quiz_max_score` (number): The highest score the quiz can award
- `quiz_score` (number): The score this submission earned, when the form is a quiz
- `scheduling` (list): Meetings booked through the form's Fillout Scheduling fields
- `submission_id` (text): Submission ID. Use with Get a submission.
- `submitted_at` (text): When the submission was completed
- `url_parameters` (list): The URL parameters the form was opened with -- where a tracking code such as utm_source arrives

**Example output**

```json
{
  "answers": {
    "Email": "ada@example.com",
    "Name": "Ada Lovelace"
  },
  "calculations": [
    {
      "calculation_id": "c1Xz",
      "name": "Lead score",
      "type": "number",
      "value": "42"
    }
  ],
  "edit_link": "https://forms.fillout.com/t/vf1JqPvhSGus?fillout_submission=abc123",
  "last_updated_at": "2026-07-29T17:04:11.000Z",
  "login_email": "ada@example.com",
  "payments": [
    {
      "currency": "usd",
      "discount_code": "EARLYBIRD",
      "email": "ada@example.com",
      "name": "Ticket",
      "payment_field_id": "p3Kd",
      "payment_id": "pi_3PkQ2xHs",
      "payment_status": "succeeded",
      "stripe_customer_id": "cus_Qf8s1Yb",
      "stripe_customer_url": "https://dashboard.stripe.com/customers/cus_Qf8s1Yb",
      "stripe_payment_url": "https://dashboard.stripe.com/payments/pi_3PkQ2xHs",
      "stripe_subscription_id": "",
      "total_amount": 4900
    }
  ],
  "questions": [
    {
      "name": "Name",
      "question_id": "kj4Q",
      "type": "ShortAnswer",
      "value": "Ada Lovelace"
    },
    {
      "name": "Email",
      "question_id": "9Fk2",
      "type": "EmailInput",
      "value": "ada@example.com"
    }
  ],
  "quiz_max_score": 10,
  "quiz_score": 8,
  "scheduling": [
    {
      "email": "ada@example.com",
      "event_end_time": "2026-08-04T15:30:00.000Z",
      "event_id": "evt_9c2f",
      "event_start_time": "2026-08-04T15:00:00.000Z",
      "event_url": "https://calendar.google.com/calendar/event?eid=evt_9c2f",
      "full_name": "Ada Lovelace",
      "meeting_notes": "Wants a demo of the reporting tab.",
      "name": "Pick a time",
      "reschedule_or_cancel_url": "https://forms.fillout.com/scheduling/evt_9c2f",
      "scheduled_user_email": "sales@example.com",
      "scheduling_id": "s7Bq",
      "timezone": "America/New_York"
    }
  ],
  "submission_id": "abc123",
  "submitted_at": "2026-07-29T17:04:11.000Z",
  "url_parameters": [
    {
      "name": "utm_source",
      "parameter_id": "utm_source",
      "value": "newsletter"
    }
  ]
}
```

### Create a webhook

Subscribe a URL to a form's new submissions. Fillout POSTs each new response to it in the same shape List submissions returns.

**Inputs**

- Form ID (`form_id`, text, required): The ID of the form, as returned by List forms. It's also the last part of the form's public URL.
- Endpoint URL (`url`, text, required): The HTTPS endpoint Fillout should POST each new submission to.

**Outputs**

- `form_id` (text): The form the webhook listens to
- `url` (text): The endpoint submissions are sent to
- `webhook_id` (text): Webhook ID. Use with Remove a webhook.

**Example output**

```json
{
  "form_id": "vf1JqPvhSGus",
  "url": "https://example.com/hooks/fillout",
  "webhook_id": "84213"
}
```

### Delete a submission

Permanently delete one submission from a form. This cannot be undone, and the response stops counting toward the form's results.

**Inputs**

- Form ID (`form_id`, text, required): The ID of the form, as returned by List forms. It's also the last part of the form's public URL.
- Submission ID (`submission_id`, text, required): The ID of the submission, as returned by List submissions or Create a submission.

**Outputs**

- `deleted` (true/false): True once Fillout has removed the submission
- `form_id` (text): The form the submission was deleted from
- `submission_id` (text): The submission that was deleted

**Example output**

```json
{
  "deleted": true,
  "form_id": "vf1JqPvhSGus",
  "submission_id": "abc123"
}
```

### Get a form

Fetch one form's structure (its questions, calculations, URL parameters, scheduling and payment fields), so you know which IDs to send when creating a submission.

**Inputs**

- Form ID (`form_id`, text, required): The ID of the form, as returned by List forms. It's also the last part of the form's public URL.

**Outputs**

- `calculations` (list): The form's calculations
- `form_id` (text): The form's ID
- `name` (text): The form's name
- `payments` (list): The form's Fillout Payments fields
- `questions` (list): The form's questions, in the order they appear
- `quiz_enabled` (true/false): Whether the form is scored as a quiz
- `scheduling` (list): The form's Fillout Scheduling fields
- `url_parameters` (list): The URL parameters the form accepts

**Example output**

```json
{
  "calculations": [
    {
      "calculation_id": "c1Xz",
      "name": "Lead score",
      "type": "number"
    }
  ],
  "form_id": "vf1JqPvhSGus",
  "name": "Customer feedback",
  "payments": [
    {
      "name": "Ticket",
      "payment_field_id": "p3Kd"
    }
  ],
  "questions": [
    {
      "name": "Name",
      "question_id": "kj4Q",
      "type": "ShortAnswer"
    },
    {
      "name": "Email",
      "question_id": "9Fk2",
      "type": "EmailInput"
    }
  ],
  "quiz_enabled": false,
  "scheduling": [
    {
      "name": "Pick a time",
      "scheduling_id": "s7Bq"
    }
  ],
  "url_parameters": [
    {
      "name": "utm_source",
      "parameter_id": "utm_source"
    }
  ]
}
```

### Get a submission

Fetch one submission and all of its answers.

**Inputs**

- Form ID (`form_id`, text, required): The ID of the form, as returned by List forms. It's also the last part of the form's public URL.
- Submission ID (`submission_id`, text, required): The ID of the submission, as returned by List submissions or Create a submission.
- Include edit link (`include_edit_link`, true/false): Optional. Also return a link that reopens each submission for editing. Default: `false`.

**Outputs**

- `answers` (object): The answers keyed by question text -- for example {'Email': 'ada@example.com'}. The quickest way to read one known answer.
- `calculations` (list): What the form's calculations worked out for this submission
- `edit_link` (text): A link that reopens this submission for editing. Empty unless the action was asked to include it.
- `last_updated_at` (text): When the submission was last changed
- `login_email` (text): The verified email address, when the form is behind a login page
- `payments` (list): Payments taken through the form's Fillout Payments fields
- `questions` (list): Every answer in form order, with the question IDs needed to write a submission back
- `quiz_max_score` (number): The highest score the quiz can award
- `quiz_score` (number): The score this submission earned, when the form is a quiz
- `scheduling` (list): Meetings booked through the form's Fillout Scheduling fields
- `submission_id` (text): Submission ID. Use with Get a submission.
- `submitted_at` (text): When the submission was completed
- `url_parameters` (list): The URL parameters the form was opened with -- where a tracking code such as utm_source arrives

**Example output**

```json
{
  "answers": {
    "Email": "ada@example.com",
    "Name": "Ada Lovelace"
  },
  "calculations": [
    {
      "calculation_id": "c1Xz",
      "name": "Lead score",
      "type": "number",
      "value": "42"
    }
  ],
  "edit_link": "https://forms.fillout.com/t/vf1JqPvhSGus?fillout_submission=abc123",
  "last_updated_at": "2026-07-29T17:04:11.000Z",
  "login_email": "ada@example.com",
  "payments": [
    {
      "currency": "usd",
      "discount_code": "EARLYBIRD",
      "email": "ada@example.com",
      "name": "Ticket",
      "payment_field_id": "p3Kd",
      "payment_id": "pi_3PkQ2xHs",
      "payment_status": "succeeded",
      "stripe_customer_id": "cus_Qf8s1Yb",
      "stripe_customer_url": "https://dashboard.stripe.com/customers/cus_Qf8s1Yb",
      "stripe_payment_url": "https://dashboard.stripe.com/payments/pi_3PkQ2xHs",
      "stripe_subscription_id": "",
      "total_amount": 4900
    }
  ],
  "questions": [
    {
      "name": "Name",
      "question_id": "kj4Q",
      "type": "ShortAnswer",
      "value": "Ada Lovelace"
    },
    {
      "name": "Email",
      "question_id": "9Fk2",
      "type": "EmailInput",
      "value": "ada@example.com"
    }
  ],
  "quiz_max_score": 10,
  "quiz_score": 8,
  "scheduling": [
    {
      "email": "ada@example.com",
      "event_end_time": "2026-08-04T15:30:00.000Z",
      "event_id": "evt_9c2f",
      "event_start_time": "2026-08-04T15:00:00.000Z",
      "event_url": "https://calendar.google.com/calendar/event?eid=evt_9c2f",
      "full_name": "Ada Lovelace",
      "meeting_notes": "Wants a demo of the reporting tab.",
      "name": "Pick a time",
      "reschedule_or_cancel_url": "https://forms.fillout.com/scheduling/evt_9c2f",
      "scheduled_user_email": "sales@example.com",
      "scheduling_id": "s7Bq",
      "timezone": "America/New_York"
    }
  ],
  "submission_id": "abc123",
  "submitted_at": "2026-07-29T17:04:11.000Z",
  "url_parameters": [
    {
      "name": "utm_source",
      "parameter_id": "utm_source",
      "value": "newsletter"
    }
  ]
}
```

### List forms

List the forms on your Fillout account.

**Inputs**: None.

**Outputs**

- `forms` (list): The forms on the account

**Example output**

```json
{
  "forms": [
    {
      "form_id": "vf1JqPvhSGus",
      "name": "Customer feedback"
    },
    {
      "form_id": "kR7mTnQbXe2p",
      "name": "Event signup"
    }
  ]
}
```

### List submissions

List the submissions a form has received, newest first.

**Inputs**

- Form ID (`form_id`, text, required): The ID of the form, as returned by List forms. It's also the last part of the form's public URL.
- Maximum submissions (`limit`, number): How many submissions to return (1-150). From 1 to 150. Default: `50`.
- Skip (`offset`, number): Optional. Skip this many submissions before returning any -- page two of a 50-per-page list starts at 50. At least 0. Default: `0`.
- Status (`status`, text): Optional. Return only completed submissions, or only ones still in progress. Defaults to completed. One of: `finished` (Completed), `in_progress` (In progress).
- Search term (`search`, text): Optional. Only return submissions containing this text.
- Submitted after (`after_date`, date and time): Optional. Only return submissions made after this moment.
- Submitted before (`before_date`, date and time): Optional. Only return submissions made before this moment.
- Order (`sort`, text): Which end of the list to start from. One of: `desc` (Newest first), `asc` (Oldest first). Default: `desc`.
- Include edit link (`include_edit_link`, true/false): Optional. Also return a link that reopens each submission for editing. Default: `false`.
- Include test responses (`include_preview`, true/false): Optional. Also return the responses submitted while previewing the form. Default: `false`.

**Outputs**

- `page_count` (number): How many pages those submissions fill at this page size. Walk them with Skip.
- `submissions` (list): The matching submissions
- `total_responses` (number): How many submissions match in total

**Example output**

```json
{
  "page_count": 3,
  "submissions": [
    {
      "answers": {
        "Email": "ada@example.com",
        "Name": "Ada Lovelace"
      },
      "calculations": [
        {
          "calculation_id": "c1Xz",
          "name": "Lead score",
          "type": "number",
          "value": "42"
        }
      ],
      "edit_link": "https://forms.fillout.com/t/vf1JqPvhSGus?fillout_submission=abc123",
      "last_updated_at": "2026-07-29T17:04:11.000Z",
      "login_email": "ada@example.com",
      "payments": [
        {
          "currency": "usd",
          "discount_code": "EARLYBIRD",
          "email": "ada@example.com",
          "name": "Ticket",
          "payment_field_id": "p3Kd",
          "payment_id": "pi_3PkQ2xHs",
          "payment_status": "succeeded",
          "stripe_customer_id": "cus_Qf8s1Yb",
          "stripe_customer_url": "https://dashboard.stripe.com/customers/cus_Qf8s1Yb",
          "stripe_payment_url": "https://dashboard.stripe.com/payments/pi_3PkQ2xHs",
          "stripe_subscription_id": "",
          "total_amount": 4900
        }
      ],
      "questions": [
        {
          "name": "Name",
          "question_id": "kj4Q",
          "type": "ShortAnswer",
          "value": "Ada Lovelace"
        },
        {
          "name": "Email",
          "question_id": "9Fk2",
          "type": "EmailInput",
          "value": "ada@example.com"
        }
      ],
      "quiz_max_score": 10,
      "quiz_score": 8,
      "scheduling": [
        {
          "email": "ada@example.com",
          "event_end_time": "2026-08-04T15:30:00.000Z",
          "event_id": "evt_9c2f",
          "event_start_time": "2026-08-04T15:00:00.000Z",
          "event_url": "https://calendar.google.com/calendar/event?eid=evt_9c2f",
          "full_name": "Ada Lovelace",
          "meeting_notes": "Wants a demo of the reporting tab.",
          "name": "Pick a time",
          "reschedule_or_cancel_url": "https://forms.fillout.com/scheduling/evt_9c2f",
          "scheduled_user_email": "sales@example.com",
          "scheduling_id": "s7Bq",
          "timezone": "America/New_York"
        }
      ],
      "submission_id": "abc123",
      "submitted_at": "2026-07-29T17:04:11.000Z",
      "url_parameters": [
        {
          "name": "utm_source",
          "parameter_id": "utm_source",
          "value": "newsletter"
        }
      ]
    }
  ],
  "total_responses": 128
}
```

### Remove a webhook

Stop a webhook from receiving submissions, using the ID Create a webhook returned.

**Inputs**

- Webhook ID (`webhook_id`, text, required): The ID of the webhook to remove, as returned by Create a webhook.

**Outputs**

- `deleted` (true/false): True once Fillout has removed the webhook
- `webhook_id` (text): The webhook that was removed

**Example output**

```json
{
  "deleted": true,
  "webhook_id": "84213"
}
```
