# v2026.10.56

The API answers as its contract says

Every API operation was called and compared with its contract. The contract and these docs are corrected, and these answers change. Three are new refusals.

## What changed

- Set variables with no `variables` list answers `400` and changes nothing. `[]` still deletes them all. See [Replace variables](https://docs.gorunner.io/api/publish/replace-workflow-variables).
- A condition operator that doesn’t exist is refused when a workflow is created, updated or imported, or a template is used. One already stored stays. See [Workflow definition](https://docs.gorunner.io/api/workflow-definition).
- A schedule preview whose body isn’t JSON answers `400`. It used to answer the default schedule. See [Preview a schedule](https://docs.gorunner.io/api/apps/preview-schedule-next-runs).
- A webhook call whose run is cancelled while it runs answers `409`, not `500`. See [Call a workflow’s webhook](https://docs.gorunner.io/api/webhooks).
- A refused `?wait=` starts no run. It used to leave one that ran about a minute later. See [Run a workflow](https://docs.gorunner.io/api/runs/run-workflow).
- Create, duplicate and import answer `definitionRev`. See [Create a workflow](https://docs.gorunner.io/api/workflows/create-workflow).
- A saved connection’s test answers `noVerdict` and `reason`, as the draft test does. See [Test a connection](https://docs.gorunner.io/api/connections/test-connection).
- A `405` sends `Allow`. See [Errors](https://docs.gorunner.io/api/errors).
- A very large `page` is a page like any other, not a `500`. An `authType` over 50 characters and an unreadable usage `cursor` are `400`.
- The export of a workflow saved without `schemaVersion` can be imported. See [Import a workflow](https://docs.gorunner.io/api/workflows/import-workflow).
- A trigger sample of a trigger the app doesn’t have is `404`, not `500`. A resume link over 5 MiB is `413`, and the link still works.
- Check a definition warns of a **Return Response** header the run would refuse, and notes a `workflowId` it ignored. See [Check a definition](https://docs.gorunner.io/api/workflows/validate-workflow-definition).
- The Partner API’s workflow reads answer `webhookUrl`, and its AI apps list answers `pagination` beside `next`. See [Get a workflow](https://docs.gorunner.io/embed/api/workflows/get-workflow).
- An AI app’s `gorunner_list_workflows` takes `view: "summary"`. `null` on an argument reads as left out, and a definition read with `gorunner_get_workflow` can be sent back as read. See [Build tools](https://docs.gorunner.io/mcp/build-tools).
- `/oauth/token`, `/oauth/register` and `/oauth/revoke` answer `429` and `405` in OAuth’s shape. A `401` for a token that was sent names `invalid_token`. Registration answers `logo_uri` and `client_uri`. See [Sign-in for developers](https://docs.gorunner.io/mcp/oauth).
- A self-hosted installation can set `API_INFLIGHT_MB`, `GORUNNER_JSBOX_SEAL`, `GORUNNER_JSBOX_SHIP_ALL` and `WORKER_RUN_GATE` in `.env`. See [Settings (.env)](https://docs.gorunner.io/self-host/settings).

## When you update

A client that cleared a workflow’s variables by sending `{}` must now send `{"variables": []}`.

GoRunner’s image is private for now. With Docker, [sign in to the registry](https://docs.gorunner.io/self-host/install-docker#sign-in-to-the-registry) first. On Kubernetes, [sign Helm in and give the cluster its pull Secret](https://docs.gorunner.io/self-host/install-kubernetes#make-a-namespace). See [Update](https://docs.gorunner.io/self-host/update) for the whole procedure, or [Install with Docker](https://docs.gorunner.io/self-host/install-docker) and [Install on Kubernetes](https://docs.gorunner.io/self-host/install-kubernetes) to install this version anew.

**Docker**

```bash
# Check the image first: its Digest must be sha256:bed1584f6962a2cc2e088f33cf3fdb45b3f9a4ebeaef83e864ac5d5657032a17
docker buildx imagetools inspect ghcr.io/ralve-org/gorunner-selfhost:v2026.10.56

# Update
./deploy.sh v2026.10.56
```

**Kubernetes**

```bash
helm upgrade gorunner oci://ghcr.io/ralve-org/charts/gorunner --version 2026.10.56 -f values.yaml
```

## Going back

To go back, run `./deploy.sh v2026.10.55`. There is no migration, so no flag is needed.

Source: https://docs.gorunner.io/changelog/v2026.10.56
