> ## Documentation Index
> Fetch the complete documentation index at: https://agents.candu.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Monitor action execution and debug failures

> Inspect every action run with detailed logs, pinpoint which layer failed (AI, snippet, or API), and apply Candu's suggested fixes for common errors.

## The Activity view

<Frame caption="The Activity tab on your Actions page shows every run. Click any entry to open the run detail.">
  <img src="https://mintcdn.com/candu/sDpAhmar-Rs5KeSS/images/Execution-&-Logs,-The-Activity-view.png?fit=max&auto=format&n=sDpAhmar-Rs5KeSS&q=85&s=196fb60256be4ae5721c8839b20db83e" alt="Execution & Logs, The Activity View" width="2346" height="636" data-path="images/Execution-&-Logs,-The-Activity-view.png" />
</Frame>

## Reading a run

The run detail shows a structured breakdown across four layers. For successful runs, each layer simply confirms what happened — user request, wizard stage, action called, policy satisfied. The same view shows where a failure originated when a run breaks.

| Layer   | Example failure                                                                                            |
| ------- | ---------------------------------------------------------------------------------------------------------- |
| TRIGGER | User asked to create an invoice                                                                            |
| WIZARD  | Stage 2 doesn't collect client info — the wizard reaches the invoice step without a `client_id` in context |
| ACTION  | `client_id` is marked required — no fallback defined if it can't be resolved from context                  |
| POLICY  | Confirm required: never reached                                                                            |

**Proposed fix:**

```text theme={null}
Ask if missing: client_id
// "Who should I send this invoice to?"
```

## What gets logged

<Frame caption="Run detail: conversation on the left, failure breakdown on the right with a specific proposed fix">
  <img src="https://mintcdn.com/candu/sDpAhmar-Rs5KeSS/images/Execution-&-Logs,-What-gets-logged.png?fit=max&auto=format&n=sDpAhmar-Rs5KeSS&q=85&s=2d61c938f1d9303684440795c49d5166" alt="Execution & Logs, What Gets Logged" width="1680" height="1258" data-path="images/Execution-&-Logs,-What-gets-logged.png" />
</Frame>

| Field        | Description                                              |
| ------------ | -------------------------------------------------------- |
| `userId`     | The end user who triggered the action                    |
| `actionId`   | The action identifier from your config                   |
| `actionName` | Human-readable action name                               |
| `routeType`  | `agentik` for chat mode, `wizard` for wizard mode        |
| `input`      | The resolved inputs the AI passed to the action          |
| `output`     | The API response on success, or error message on failure |
| `status`     | `success` or `failed`                                    |
| `receivedAt` | Server-side timestamp                                    |

### Retention

Execution logs are retained for 12 months. Identifiers like `organizationId` or `workspaceId` are never persisted — they're injected into the AI's system prompt for the request, then discarded. Only `userId` is stored. See [Policies → Data and privacy](/actions/policies#data-and-privacy) for the full breakdown.

## Common error types

### Validation error (422)

A required field was missing. Fix: add the field to `Require:` in the action's Booster.

### Network error (status 0)

The fetch threw before a response was received. This usually means the snippet ran before the user was authenticated, or your API doesn't accept requests from the user's browser origin. Check CORS headers and that your endpoint is reachable from the browser.

### Action not found

The AI called an action ID that doesn't exist in the loaded registry. Usually means an action was removed from `actions.json` without redeploying.

### Auth failure (401/403)

Your `fetchFn` may be reading a stale token. Read it fresh on every request rather than closing over an initial value.
