> For the complete documentation index, see [llms.txt](https://docs.baas.sh/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.baas.sh/baas-console/automations/runs-and-logs.md).

# Runs and logs

Follow every run of an automation in the Runs tab, read its logs inline, and download them as NDJSON.

The **Runs** tab on an automation's page lists its recorded executions: what ran, when, and how it went. Logs arrive asynchronously; a worker crash can leave them incomplete.

## The Runs tab

Each run is a row with five columns:

| Column       | What it shows                       |
| ------------ | ----------------------------------- |
| **Run**      | The run's identifier                |
| **Origin**   | The trigger type that fired the run |
| **Started**  | When the run started                |
| **Duration** | How long it took                    |
| **Status**   | The run's current status            |

The table paginates as the history grows, and runs stay available for the [life of the automation](/baas-console/automations/manage-an-automation.md).

Before the first firing, the tab reads **No runs yet**: "Runs will appear here once this automation is triggered."

## Run statuses

| Status        | Meaning                                                      |
| ------------- | ------------------------------------------------------------ |
| **Queued**    | The run is accepted and waiting to start.                    |
| **Running**   | Actions are executing, in pipeline order.                    |
| **Completed** | Every action finished successfully.                          |
| **Failed**    | The execution failed. Completed effects are not rolled back. |

A non-batched step that fails for a transient reason is retried automatically, if the step is safe to repeat. Every retry is logged. The [API action](/baas-console/automations/actions/api.md#automatic-retries) page says which requests are retried. When the retries run out, the run fails.

A run can also stay at **Running** while a [Transaction action](/baas-console/automations/actions/transaction.md#waiting-for-confirmation) waits for its on-chain confirmation.

## The trigger payload

Clicking a row opens the run's detail: **Trigger payload** first, then the logs.

Open **Trigger payload** to see the JSON exactly as it arrived. It holds the same object your actions read through `trigger`, so it is the fastest way to tell a bad payload from a bad action. The [Trigger object](/baas-console/automations/reference/trigger.md) page describes what each trigger type delivers.

## Read the logs

The second panel holds the run's logs. Each entry shows a timestamp, a level (`info`, `warn`, or `error`), and a message. Action entries identify the action and plugin, with an **Action** or **Batch** tag; error codes and **Details**, including user-code stack traces, appear when available.

Messages such as "Action started" and "Action succeeded" let you follow the pipeline step by step, and the closing lines report how the run itself ended. Lines a [Function](/baas-console/automations/actions/function.md) prints with `console.log` appear too, marked `console`. An action you turned off never enters the run, so it leaves no lines.

Logs are available during execution, newest first. **Refresh** checks for new entries; **Load older logs** fetches the next page. An empty panel can mean ingestion is still pending.

The API returns `{ data, limit, nextCursor }` from `GET /workflows/{id}/runs/{runId}/logs`. `limit` defaults to 20, maximum 100. Pass `nextCursor` as `cursor` with the same limit until it is null, even after an empty page.

## Download the logs

Each row ends with a download icon (**Download**). It saves the run's logs as `run-<run-id>-logs.ndjson`: one stored log payload per line. The API download is `GET /workflows/{id}/runs/{runId}/logs/download`; it streams successive pages. An interrupted download is incomplete.

## When runs are recorded

A run is recorded when three things are true:

* the automation is [**Active**](/baas-console/automations/manage-an-automation.md),
* its [trigger is configured](/baas-console/automations/triggers.md),
* at least one [action](/baas-console/automations/actions.md) in the pipeline is active.

While an automation is **Inactive**, its trigger firings are refused and nothing is recorded. A run already under way [finishes normally](/baas-console/automations/manage-an-automation.md#activate-and-deactivate).

## Next

* [Manage an automation](/baas-console/automations/manage-an-automation.md): activate, rename, or delete it.
