# Executions

> Part of the Cowliss docs. Markdown for every page: append `index.md` to its URL. Site map: /llms.txt

<!-- GENERATED by apps/docs/scripts/generate-api-reference.ts. Do not edit. Regenerate with `pnpm -F cowliss-docs generate`. -->

An execution is one automation for one profile, pinned to the version it started on. It can be filtered by automation, version, status, and profile in one place. Its detail carries what the automation logged with `api.log`. Pipeline keys can read executions, but stopping them is explicit: `cancel` is the only write and requires a dashboard session.

## GET /v1/executions

List executions, newest first

**Auth:** Session token, or an org [pipeline key](/guides/keys/).

**Query parameters**

```json
{
  "cursor": "string",
  "limit": 50,
  "q": "string",
  "automation": "string",
  "version": "string",
  "status": "running",
  "profileId": "string",
  "appId": "string",
  "since": "2026-01-15T09:30:00.000Z"
}
```

| Field | Type | Required | Constraints |
| --- | --- | --- | --- |
| `cursor` | string | no |  |
| `limit` | integer | no | default `50`; 1 ≤ x ≤ 100 |
| `q` | string | no | length 0–200 |
| `automation` | string | no | length 1–200 |
| `version` | string | no | length 1–200 |
| `status` | "running" \| "waiting" \| "completed" \| "failed" \| "cancelled" | no |  |
| `profileId` | string | no | length 1–200 |
| `appId` | string | no | length 0–200 |
| `since` | string (date-time) | no |  |

**Response 200**

```json
{
  "data": [
    {
      "id": "string",
      "orgId": "string",
      "appId": "string",
      "automationKey": "string",
      "profileId": "string",
      "workflowId": "string",
      "runId": "string",
      "versionId": "string",
      "triggerEventId": "string",
      "status": "running",
      "step": "string",
      "timerDeadline": "2026-01-15T09:30:00.000Z",
      "journalEntries": 42,
      "error": "string",
      "startedAt": "2026-01-15T09:30:00.000Z",
      "updatedAt": "2026-01-15T09:30:00.000Z",
      "endedAt": "2026-01-15T09:30:00.000Z"
    }
  ],
  "meta": {
    "requestId": "string",
    "nextCursor": "string",
    "hasMore": true,
    "warnings": [
      {
        "code": "string",
        "message": "string",
        "suggestion": "string"
      }
    ]
  }
}
```

| Field | Type | Required | Constraints |
| --- | --- | --- | --- |
| `data` | object[] | yes |  |
| `data[]` | object | yes |  |
| `data[].id` | string | yes |  |
| `data[].orgId` | string | yes |  |
| `data[].appId` | string | yes |  |
| `data[].automationKey` | string | yes |  |
| `data[].profileId` | string | yes |  |
| `data[].workflowId` | string | yes |  |
| `data[].runId` | string | yes |  |
| `data[].versionId` | string | yes |  |
| `data[].triggerEventId` | string \| null | yes |  |
| `data[].status` | "running" \| "waiting" \| "completed" \| "failed" \| "cancelled" | yes |  |
| `data[].step` | string \| null | yes |  |
| `data[].timerDeadline` | string (date-time) \| null | yes |  |
| `data[].journalEntries` | integer | yes | -2147483648 ≤ x ≤ 2147483647 |
| `data[].error` | string \| null | yes |  |
| `data[].startedAt` | string (date-time) | yes |  |
| `data[].updatedAt` | string (date-time) | yes |  |
| `data[].endedAt` | string (date-time) \| null | yes |  |
| `meta` | object | no |  |
| `meta.requestId` | string | no |  |
| `meta.nextCursor` | string \| null | no |  |
| `meta.hasMore` | boolean | no |  |
| `meta.warnings` | object[] | no |  |
| `meta.warnings[]` | object | no |  |
| `meta.warnings[].code` | string | yes |  |
| `meta.warnings[].message` | string | yes |  |
| `meta.warnings[].suggestion` | string | no |  |

Errors follow the [shared envelope and code table](/api-conventions/#errors).

## POST /v1/executions/cancel

Cancel live executions of an automation, or of one version

Admin only. Each execution stops when it reaches its next step.

**Auth:** Session token.

**Request body**

```json
{
  "data": {
    "automation": "string",
    "appId": "string",
    "version": "string"
  }
}
```

| Field | Type | Required | Constraints |
| --- | --- | --- | --- |
| `data` | object | yes |  |
| `data.automation` | string | no | length 1–200 |
| `data.appId` | string | no | length 0–200 |
| `data.version` | string | no | length 1–200 |

**Response 200**

```json
{
  "data": {
    "cancelling": true
  },
  "meta": {
    "requestId": "string",
    "nextCursor": "string",
    "hasMore": true,
    "warnings": [
      {
        "code": "string",
        "message": "string",
        "suggestion": "string"
      }
    ]
  }
}
```

| Field | Type | Required | Constraints |
| --- | --- | --- | --- |
| `data` | object | yes |  |
| `data.cancelling` | true | yes |  |
| `meta` | object | no |  |
| `meta.requestId` | string | no |  |
| `meta.nextCursor` | string \| null | no |  |
| `meta.hasMore` | boolean | no |  |
| `meta.warnings` | object[] | no |  |
| `meta.warnings[]` | object | no |  |
| `meta.warnings[].code` | string | yes |  |
| `meta.warnings[].message` | string | yes |  |
| `meta.warnings[].suggestion` | string | no |  |

Errors follow the [shared envelope and code table](/api-conventions/#errors).

## GET /v1/executions/{id}

Inspect one execution, with its logs

**Auth:** Session token, or an org [pipeline key](/guides/keys/).

**Response 200**

```json
{
  "data": {
    "id": "string",
    "orgId": "string",
    "appId": "string",
    "automationKey": "string",
    "profileId": "string",
    "workflowId": "string",
    "runId": "string",
    "versionId": "string",
    "triggerEventId": "string",
    "status": "running",
    "step": "string",
    "timerDeadline": "2026-01-15T09:30:00.000Z",
    "journalEntries": 42,
    "error": "string",
    "startedAt": "2026-01-15T09:30:00.000Z",
    "updatedAt": "2026-01-15T09:30:00.000Z",
    "endedAt": "2026-01-15T09:30:00.000Z",
    "journal": [
      {
        "call": {
          "name": "sleep",
          "args": {
            "duration": "string"
          }
        },
        "result": {
          "ok": true,
          "value": {}
        },
        "at": 42
      }
    ],
    "logs": [
      {
        "seq": 42,
        "level": "debug",
        "message": "string",
        "createdAt": "2026-01-15T09:30:00.000Z"
      }
    ]
  },
  "meta": {
    "requestId": "string",
    "nextCursor": "string",
    "hasMore": true,
    "warnings": [
      {
        "code": "string",
        "message": "string",
        "suggestion": "string"
      }
    ]
  }
}
```

| Field | Type | Required | Constraints |
| --- | --- | --- | --- |
| `data` | object | yes |  |
| `data.id` | string | yes |  |
| `data.orgId` | string | yes |  |
| `data.appId` | string | yes |  |
| `data.automationKey` | string | yes |  |
| `data.profileId` | string | yes |  |
| `data.workflowId` | string | yes |  |
| `data.runId` | string | yes |  |
| `data.versionId` | string | yes |  |
| `data.triggerEventId` | string \| null | yes |  |
| `data.status` | "running" \| "waiting" \| "completed" \| "failed" \| "cancelled" | yes |  |
| `data.step` | string \| null | yes |  |
| `data.timerDeadline` | string (date-time) \| null | yes |  |
| `data.journalEntries` | integer | yes | -2147483648 ≤ x ≤ 2147483647 |
| `data.error` | string \| null | yes |  |
| `data.startedAt` | string (date-time) | yes |  |
| `data.updatedAt` | string (date-time) | yes |  |
| `data.endedAt` | string (date-time) \| null | yes |  |
| `data.journal` | object[] | yes |  |
| `data.journal[]` | object | yes |  |
| `data.journal[].call` | one of | yes |  |
| `data.journal[].call〈variant〉` | object | yes |  |
| `data.journal[].call〈variant〉.name` | "sleep" | yes |  |
| `data.journal[].call〈variant〉.args` | object | yes |  |
| `data.journal[].call〈variant〉.args.duration` | string \| integer | yes |  |
| `data.journal[].call〈variant〉` | object | yes |  |
| `data.journal[].call〈variant〉.name` | "waitForEvent" | yes |  |
| `data.journal[].call〈variant〉.args` | object | yes |  |
| `data.journal[].call〈variant〉.args.event` | string \| string[] | yes |  |
| `data.journal[].call〈variant〉.args.timeout` | string \| integer | yes |  |
| `data.journal[].call〈variant〉` | object | yes |  |
| `data.journal[].call〈variant〉.name` | "send.email" | yes |  |
| `data.journal[].call〈variant〉.args` | object | yes |  |
| `data.journal[].call〈variant〉.args.template` | string | yes | length 0–64 |
| `data.journal[].call〈variant〉.args.props` | record\<string, any> | yes |  |
| `data.journal[].call〈variant〉.args.from` | string | no | length 0–200 |
| `data.journal[].call〈variant〉.args.replyTo` | string (email) | no |  |
| `data.journal[].call〈variant〉` | object | yes |  |
| `data.journal[].call〈variant〉.name` | "send.webhook" | yes |  |
| `data.journal[].call〈variant〉.args` | object | yes |  |
| `data.journal[].call〈variant〉.args.destination` | string | yes | length 1–∞ |
| `data.journal[].call〈variant〉.args.payload` | record\<string, any> | yes |  |
| `data.journal[].call〈variant〉` | object | yes |  |
| `data.journal[].call〈variant〉.name` | "profile.get" | yes |  |
| `data.journal[].call〈variant〉.args` | object | yes |  |
| `data.journal[].call〈variant〉` | object | yes |  |
| `data.journal[].call〈variant〉.name` | "profiles.get" | yes |  |
| `data.journal[].call〈variant〉.args` | object | yes |  |
| `data.journal[].call〈variant〉.args.id` | string | yes | length 1–∞ |
| `data.journal[].call〈variant〉` | object | yes |  |
| `data.journal[].call〈variant〉.name` | "restart" | yes |  |
| `data.journal[].call〈variant〉.args` | object | yes |  |
| `data.journal[].call〈variant〉.args.event` | object | no |  |
| `data.journal[].call〈variant〉` | object | yes |  |
| `data.journal[].call〈variant〉.name` | "traits.set" | yes |  |
| `data.journal[].call〈variant〉.args` | object | yes |  |
| `data.journal[].call〈variant〉.args.key` | string | yes | length 1–∞ |
| `data.journal[].call〈variant〉.args.value` | any | yes |  |
| `data.journal[].call〈variant〉` | object | yes |  |
| `data.journal[].call〈variant〉.name` | "traits.unset" | yes |  |
| `data.journal[].call〈variant〉.args` | object | yes |  |
| `data.journal[].call〈variant〉.args.key` | string | yes | length 1–∞ |
| `data.journal[].call〈variant〉` | object | yes |  |
| `data.journal[].call〈variant〉.name` | "events.track" | yes |  |
| `data.journal[].call〈variant〉.args` | object | yes |  |
| `data.journal[].call〈variant〉.args.event` | string | yes | length 1–∞ |
| `data.journal[].call〈variant〉.args.properties` | record\<string, any> | yes |  |
| `data.journal[].result` | one of | yes |  |
| `data.journal[].result〈variant〉` | object | yes |  |
| `data.journal[].result〈variant〉.ok` | true | yes |  |
| `data.journal[].result〈variant〉.value` | any | yes |  |
| `data.journal[].result〈variant〉` | object | yes |  |
| `data.journal[].result〈variant〉.ok` | false | yes |  |
| `data.journal[].result〈variant〉.error` | object | yes |  |
| `data.journal[].result〈variant〉.error.code` | string | yes | length 1–∞ |
| `data.journal[].result〈variant〉.error.message` | string | yes |  |
| `data.journal[].at` | integer | yes | 0 ≤ x ≤ ∞ |
| `data.logs` | object[] | yes |  |
| `data.logs[]` | object | yes |  |
| `data.logs[].seq` | integer | yes | -2147483648 ≤ x ≤ 2147483647 |
| `data.logs[].level` | "debug" \| "info" \| "warn" \| "error" | yes |  |
| `data.logs[].message` | string | yes |  |
| `data.logs[].createdAt` | string (date-time) | yes |  |
| `meta` | object | no |  |
| `meta.requestId` | string | no |  |
| `meta.nextCursor` | string \| null | no |  |
| `meta.hasMore` | boolean | no |  |
| `meta.warnings` | object[] | no |  |
| `meta.warnings[]` | object | no |  |
| `meta.warnings[].code` | string | yes |  |
| `meta.warnings[].message` | string | yes |  |
| `meta.warnings[].suggestion` | string | no |  |

Errors follow the [shared envelope and code table](/api-conventions/#errors).
