client.workflows.executions only exposes run_and_wait. Inspect and manage existing workflow runs through client.runs.
Which polling option do I pick?
| Run length | Use |
|---|---|
| 0–60s | client.run("workflows.<slug>", input, wait_for_completion=60), server hold. |
| 60s–5min | client.workflows.executions.run_and_wait(id, input), client polls every 2s. |
| Driving a UI | client.run(...) then poll client.runs.get(id) yourself. |
Statuses
status before reading result.
Get
result is set on status == "completed". error is set on status == "failed".
Per-step detail
Run and wait
The convenience helper that wraps trigger + poll:client.runs.get until terminal or timeout. Raises EigenpalTimeoutError on timeout.
List
{ id, workflow_id, status, trigger_type, trigger_input, result, error, created_at, started_at, completed_at, workflow }.
workflow is { id, name } of the owning workflow, or None if it has been deleted.
Cancel
created/pending), transitions immediately to cancelled. For running executions, stamps cancel_requested_at so the worker honors the cancel at the next checkpoint.
Polling pattern
Ifrun_and_wait doesn’t fit (e.g. you’re driving a UI progress bar), poll manually:
Context manager
The client owns an httpx connection pool. Use awith block to close it deterministically: