# Jotform

Read, add, edit and delete Jotform submissions, and look up forms, their questions and the account.

## Connect Jotform

1. In the sidebar, open **Connections** and press **Add connection**.
2. Type `jotform` and choose **Jotform**.
3. Fill in the fields. Each one says **Required** or **Optional**.
4. Press **Test and save**. GoRunner checks the connection before it saves anything.

The sheet asks for:

- **API key · Required**: A Jotform API key.
- **Region · Optional**: Where the account is kept: empty or us (api.jotform.com), eu (eu-api.jotform.com) or hipaa (hipaa-api.jotform.com).

Paste a Jotform API key (Jotform → My Account → API → Create New Key; Full Access to add, edit or delete submissions, Read Access for the rest). Set Region when the account is kept in Jotform’s EU data center or is a HIPAA account.

[Connections](https://docs.gorunner.io/build/connections) says how to sign in again, rename or delete it. In a product that embeds GoRunner, **Add connection** can be missing: then [your provider makes connections](https://docs.gorunner.io/embed/customer-connections) for you.

## Start a workflow

Add a trigger and choose **Jotform**. The trigger uses the same connection as the steps.

### On New Submission

Starts a run as soon as someone submits the form. Publishing the workflow adds a webhook to the form in Jotform; unpublishing removes it. Jotform does not sign its webhooks, so the address Jotform is given carries a secret key, and a request without it is refused; the same submission sent twice starts one run. Jotform does not resend a delivery that failed.

- **Form · Required**: The form whose submissions start a run.

A later step can use its data, such as `{{trigger.answers}}`, `{{trigger.formID}}`, `{{trigger.formTitle}}` and 4 more. See [Use data from earlier steps](https://docs.gorunner.io/build/use-data-from-earlier-steps).

## Do things in Jotform

Add a **Jotform** step, choose a **Resource**, then an **Operation**. Choose a row to see its fields.

- [Submission](https://docs.gorunner.io/apps/jotform#fields-f-submission): Create · Get · Get Many · Update · Delete
- [Form](https://docs.gorunner.io/apps/jotform#fields-f-form): Get · Get Many · Get Properties · Clone · Delete
- [Question](https://docs.gorunner.io/apps/jotform#fields-f-question): Get · Get Many
- [Account](https://docs.gorunner.io/apps/jotform#fields-f-user): Get · Get Usage

Later steps read a step’s output by its name: see [Use data from earlier steps](https://docs.gorunner.io/build/use-data-from-earlier-steps).

## Limits

- A reply from Jotform can be up to 16 MB (a file download can have its own limit). A larger one fails the step; it is never cut short.
- When Jotform says to slow down (429), the step waits as long as it asks, if the step’s time allows. Otherwise it fails and says when to try again.

Not in your list? See [When an app isn’t here](https://docs.gorunner.io/apps/when-an-app-isnt-here#q-not-in-list).

## For developers

In the API, which calls apps pieces, Jotform is `pieceId: "jotform"` with `actionId: "jotform"`, set by `resource` and an `operation_…` field, such as `operation_form`. Its trigger is `jotformtrigger` / `jotform_submission`. [Get an app](https://docs.gorunner.io/api/apps/get-app) returns every field.

It can change something outside the run (`writes_external`). See [How versions and side effects work](https://docs.gorunner.io/apps#q-versions).

### Jotform › Submission

### Create

- **Form · Required**: The form the submissions belong to.
- **Answers · Required**: The answers by question id (Question › Get Many lists the ids), such as {"3": {"first": "Ada", "last": "Lovelace"}, "4": "ada@example.com"}. Update changes only the questions given.

### Get

- **Submission ID · Required**: The submission's id (digits).
- **Simplify Answers · Optional**: Add the answers as plain values by question label (values). On by default.

### Get Many

- **Form · Required**: The form the submissions belong to.
- **Filter · Optional**: Only submissions matching this Jotform filter, such as {"created_at:gt": "2026-11-01 00:00:00"} or {"status:ne": "DELETED"}. Times are in the account's time zone. Empty lists every submission.
- **Order By · Optional**: Which field orders the list (newest first). Options: Jotform's order, created at, updated at, id.
- **Return All · Optional**: Read every submission, page by page (at most 2000; past that the step fails rather than stop early). Off by default.
- **Limit · Optional**: How many submissions to return (1–2000). Default: 50. Shows when **Return All** is off.
- **Simplify Answers · Optional**: Add the answers as plain values by question label (values). On by default.

### Update

- **Submission ID · Required**: The submission's id (digits).
- **Answers · Required**: The answers by question id (Question › Get Many lists the ids), such as {"3": {"first": "Ada", "last": "Lovelace"}, "4": "ada@example.com"}. Update changes only the questions given.

### Delete

- **Submission ID · Required**: The submission's id (digits).

### Jotform › Form

### Get, Get Properties, Clone and Delete

- **Form · Required**: The form to read, copy or delete.

### Get Many

- **Filter · Optional**: Only forms matching this Jotform filter, such as {"status": "ENABLED"} or {"title:ne": "Test"}. Empty lists every form.
- **Order By · Optional**: Which field orders the list (newest first). Options: Jotform's order, created at, updated at, title, status, count, new.
- **Return All · Optional**: Read every form, page by page (at most 2000; past that the step fails rather than stop early). Off by default.
- **Limit · Optional**: How many forms to return (1–2000). Default: 50. Shows when **Return All** is off.

### Jotform › Question

### Get

- **Form · Required**: The form whose questions to read.
- **Question ID · Required**: The question's id (qid, digits).

### Get Many

- **Form · Required**: The form whose questions to read.

### Jotform › Account

### Get and Get Usage

Nothing to fill in.

Source: https://docs.gorunner.io/apps/jotform
