# Tally

Read and delete Tally submissions, create, change and delete forms, and look up questions and workspaces.

## Connect Tally

1. In the sidebar, open **Connections** and press **Add connection**.
2. Type `tally` and choose **Tally**.
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 Tally API key (tly-…).

Paste a Tally API key (Tally → Settings → API keys → Create API key). The key acts as the person who made it: it reaches their workspaces and forms.

[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 **Tally**. The trigger uses the same connection as the steps.

### On New Response

Starts a run as soon as someone submits the form. Publishing the workflow adds a webhook to the form in Tally (with a signing secret kept encrypted); unpublishing removes it. Every delivery's Tally-Signature is checked and an unsigned or wrongly signed one is refused; a delivery Tally sends again (the same eventId) starts no second run.

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

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

## Do things in Tally

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

- [Submission](https://docs.gorunner.io/apps/tally#fields-f-submission): Get · Get Many · Delete
- [Form](https://docs.gorunner.io/apps/tally#fields-f-form): Create · Get · Get Many · Update · Delete
- [Question](https://docs.gorunner.io/apps/tally#fields-f-question): Get Many
- [Workspace](https://docs.gorunner.io/apps/tally#fields-f-workspace): Get · Get Many
- [Account](https://docs.gorunner.io/apps/tally#fields-f-user): Get Me

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 Tally 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 Tally 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, Tally is `pieceId: "tally"` with `actionId: "tally"`, set by `resource` and an `operation_…` field, such as `operation_form`. Its trigger is `tallytrigger` / `tally_response`. [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).

### Tally › Submission

### Get and Delete

- **Form · Required**: The form the submissions belong to.
- **Submission ID · Required**: The submission's id.

### Get Many

- **Form · Required**: The form the submissions belong to.
- **Submissions · Optional**: Completed submissions, partial ones (left before the end), or both. Options: All, Completed, Partial. Default: Completed.
- **Since · Optional**: Only submissions made at or after this time (ISO 8601).
- **Until · Optional**: Only submissions made at or before this time (ISO 8601).
- **After Submission · Optional**: Only submissions that came after this submission 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.

### Tally › Form

### Create

- **Workspace · Optional**: The workspace the new form goes in. Empty: the default one.
- **Start From · Optional**: The id of a ready-made Tally form to start from. Empty starts blank.
- **Status · Optional**: Draft or published. On Update, Unchanged leaves it; Published without new blocks publishes the saved draft. Options: Unchanged, Draft, Published, Blank. Default: Unchanged.
- **Blocks · Optional**: The form's content as Tally's blocks, such as [{"uuid": "…", "type": "FORM_TITLE", "groupUuid": "…", "groupType": "TEXT", "payload": {"title": "Contact us"}}]. Update replaces all blocks. Empty on Create makes a blank form.
- **Settings · Optional**: Form settings as Tally takes them, such as {"language": "en", "isClosed": false}.

### Get and Delete

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

### Get Many

- **Workspace · Optional**: Only forms in this workspace. Empty lists every form.
- **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.

### Update

- **Form · Required**: The form to read, change or delete.
- **New Name · Optional**: A new name for the form. Empty leaves it as it is.
- **Status · Optional**: Draft or published. On Update, Unchanged leaves it; Published without new blocks publishes the saved draft. Options: Unchanged, Draft, Published, Blank. Default: Unchanged.
- **Blocks · Optional**: The form's content as Tally's blocks, such as [{"uuid": "…", "type": "FORM_TITLE", "groupUuid": "…", "groupType": "TEXT", "payload": {"title": "Contact us"}}]. Update replaces all blocks. Empty on Create makes a blank form.
- **Settings · Optional**: Form settings as Tally takes them, such as {"language": "en", "isClosed": false}.

### Tally › Question

### Get Many

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

### Tally › Workspace

### Get

- **Workspace · Required**: The workspace to read.

### Get Many

- **Return All · Optional**: Read every workspace, page by page (at most 2000; past that the step fails rather than stop early). Off by default.
- **Limit · Optional**: How many workspaces to return (1–2000). Default: 50. Shows when **Return All** is off.

### Tally › Account

### Get Me

Nothing to fill in.

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