# List run waits (/en/docs/api/native/automation/listRunWaits)





List current and historical waits in ledger order. Wait types include event, timer and child.

`GET /automation/v1/runs/{id}/waits`

## Authentication [#authentication]

`Authorization: Bearer $PRAXIS_API_KEY`

## Request fields [#request-fields]

| Parameter | Type | Description |
| --- | --- | --- |
| path: id | `string` | required; Run ID (run_). |
| query: limit | `integer` | optional; Page size: integer 1–100, default 50. minimum: 1; maximum: 100 |
| query: cursor | `string` | optional; Opaque next_cursor from the previous page; keep the original filters when paging. |

## Examples [#examples]

[SDK installation and example environment](/en/docs/api/native/automation)

Set these environment variables to your own resources:

| Variable | Source |
| --- | --- |
| RUN_ID | [Run id; suspend/resume require a workflow; cancel requires a nonterminal run](/en/docs/api/native/automation/createRun) |

```bash
: "${RUN_ID:?Set RUN_ID}"
curl --fail-with-body -X GET "https://api.deepraxis.ai/automation/v1/runs/${RUN_ID}/waits" \
  -H "Authorization: Bearer $PRAXIS_API_KEY"
```

```typescript
import { createAutomationClient } from '@deepraxis/sdk/automation';

function env(name: string): string {
  const value = process.env[name];
  if (!value) throw new Error(`Set ${name}`);
  return value;
}
const automation = createAutomationClient({
  apiKey: env('PRAXIS_API_KEY'),
  baseUrl: 'https://api.deepraxis.ai',
  maxRetries: 0,
  timeoutMs: 90_000,
});
const result = await automation.runs.waits.list({
  "path": {
    "id": env("RUN_ID")
  }
});
console.log(result);
```

## Response [#response]

### HTTP 200 [#http-200]

Success

`application/json`

| Field | Type | Description |
| --- | --- | --- |
| data | `object[]` | required; Wait points, current and historical on this page, ordered by created_at descending, then id descending. |
| data[].id | `string` | required; Wait point id, prefixed wait_; use it as wait_id when completing an event wait. |
| data[].run_id | `string` | required; Id (run_) of the run this wait belongs to. |
| data[].kind | `"event"` / `"timer"` / `"child"` | required; Wait kind. event waits for an external event that can be submitted with runs.completeWait; timer waits until resume_at; child waits for a child run to finish. |
| data[].state | `"cancelled"` / `"open"` / `"resolved"` / `"expired"` | required; Wait point state. open is still waiting; resolved was satisfied; expired passed its expires_at; cancelled was cancelled and can no longer be satisfied. |
| data[].task | `null` / `object` | required; The workflow step &#123;reference, name&#125; that produced the wait; null when there is no such step. |
| data[].task (variant 2).reference | `string` | required; JSON Pointer of the step, for example /do/2/wait_payment. |
| data[].task (variant 2).name | `string` | required; Step name, the key in the workflow YAML. |
| data[].resume_at | `null` / `string` | required; For kind=timer, the instant the run resumes (RFC 3339 UTC); null for other kinds. |
| data[].event_type | `null` / `string` | required; For kind=event, the event type being awaited; null for other kinds. |
| data[].child_run_id | `null` / `string` | required; For kind=child, the id of the child run being awaited; null for other kinds. |
| data[].created_at | `string` | required; Time the wait point was created (RFC 3339 UTC). |
| data[].expires_at | `null` / `string` | required; Time the wait point expires (RFC 3339 UTC), or null if it has no deadline. |
| data[].resolved_at | `null` / `string` | required; Time the wait point was resolved (RFC 3339 UTC), or null if still open. |
| next_cursor | `null` / `string` | required; Cursor for the next page: pass it unchanged as cursor with the same filters; null when there are no more pages. No total is returned. |

### Measured response [#measured-response]

HTTP 200

```json
{
  "data": [
    {
      "id": "wait_wf-eebc9ef34869206fa1bcc1e2ae6375990a7ab34c5ad485ac98a4f189c4b37346",
      "run_id": "run_00mv67mkw52c7fa90cc9649b1053e66fd836b071f289acb667ff8ca853e65bc4608e9a45bd",
      "kind": "event",
      "state": "open",
      "task": {
        "reference": "/do/0/ready",
        "name": "ready"
      },
      "resume_at": null,
      "event_type": "ready",
      "child_run_id": null,
      "created_at": "2026-10-13T04:57:56.982Z",
      "expires_at": "2026-10-14T04:57:50.405Z",
      "resolved_at": null
    }
  ],
  "next_cursor": null
}
```

## Errors [#errors]

| HTTP | Codes and description |
| --- | --- |
| 400 | INVALID_PARAMS: Invalid request parameters, path, cursor, or body format. |
| 404 | RUN_NOT_FOUND: The run does not exist or is not visible to this tenant. |
| default | RFC 9457 automation problem. 429 includes Retry-After. |

[Authentication and common errors](/en/docs/api/errors) · Retain the `X-Request-Id` response header for troubleshooting.
