eigenpal
Trigger and inspect Eigenpal automations from Python.
Install
pip install eigenpal
Requires Python 3.10+. Get an API key at studio.eigenpal.com -> Settings -> API Keys.
Quick Start
import os
from pathlib import Path
from eigenpal import EigenpalClient
client = EigenpalClient(api_key=os.environ["EIGENPAL_API_KEY"])
result = client.run_and_wait(
"workflows.extract-invoice",
input={"contract_document": Path("contract.pdf")},
)
print(result.finished, result.output)
target is always typed: workflows.<slug> or agents.<slug>. That keeps workflow and agent slugs unambiguous.
Automations
Workflows and agents are exposed as automations.
listing = client.automations.list(search="invoice", folder_id="fldr_…")
automation = client.automations.get("workflows.extract-invoice")
client.automations.move("workflows.extract-invoice", folder_path="billing/invoices")
client.automations.delete("workflows.extract-invoice")
list(folder_id="null") returns unfiled YAML workflows at the tenant root. Agent automations have no folder model.
Workflow delete archives the automations parent and keeps execution history. Agent delete removes the agent implementation and history, matching the dashboard, with best-effort leftover storage cleanup.
Folders
Workflow and template trees are a first-class resource. Nested agent directories in Git are source organization only.
tree = client.folders.list(type="workflow", tree="true")
folder = client.folders.create(name="invoices", type="workflow")
client.folders.update(folder.id, name="billing")
client.folders.delete(folder.id) # unfiles workflows; does not delete them
Runs
started = client.run("agents.invoice-agent", input={"invoice": Path("invoice.pdf")})
run = client.runs.get(started.id, expand=["usage", "execution"])
usage = client.runs.usage(started.id)
steps = client.runs.steps(started.id)
events = client.runs.events(started.id)
trace = client.runs.trace.get(started.id)
client.runs.cancel(started.id)
client.rerun(started.id, wait_for_completion=60)
List calls use the same run API for workflows, agents, manual runs, and eval runs:
recent_failures = client.runs.list(
type="workflow",
status="failed,cancelled",
limit=50,
)
Files And Artifacts
Use client.files for reusable upload-first blobs. When referenced by a run input, Eigenpal snapshots the file into run-scoped artifacts.
uploaded = client.files.upload(Path("contract.pdf"))
started = client.run(
"workflows.extract-invoice",
input={"contract_document": {"$fileId": uploaded.id}},
)
artifacts = client.runs.artifacts.list(started.id)
content = client.runs.artifacts.download(started.id, artifacts.artifacts[0].path)
You can also pass a Path, file handle, or {"content": bytes, "filename": str, "mime_type": str} directly to client.run; the SDK sends multipart form data automatically. Durable run inputs and dataset examples store scoped {"$file": "input/..."} artifact refs after ingestion.
Errors
Every non-2xx response raises a typed subclass of EigenpalError:
| HTTP | Class |
|---|---|
| 400 | EigenpalValidationError |
| 401 | EigenpalAuthError |
| 403 | EigenpalForbiddenError |
| 404 | EigenpalNotFoundError |
| 429 | EigenpalRateLimitError |
| 5xx | EigenpalServerError |
| timeout | EigenpalTimeoutError |
Reference
| Topic | What is in it |
|---|---|
| Automations | List, inspect, move, delete, versions, triggers, folders. |
| Runs | Start, poll, cancel, rerun, usage, steps, events, traces, reviews. |
| File inputs | Multipart upload from Path, file handle, or bytes. |
| Errors | Typed exceptions, retries, request ids. |
| Configuration | API key, base_url, timeouts, headers. |
| Full API reference | Every method, generated from OpenAPI. |
License
Apache-2.0.
Release files for eigenpal 0.20.7
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| eigenpal-0.20.7.tar.gz | 150.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| eigenpal-0.20.7-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 611.7 kB
Release files / eigenpal-0.20.7.tar.gz
| Download URL | eigenpal-0.20.7.tar.gz |
|---|---|
| Size | 150.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
d15139955a5990835f9f5d7bc6b5ed567c20e38af3eaab3edabf9ccf4d7d289f
|
|
BLAKE2b-256 checksum How to use checksums |
2ad7cd395d89d93984290091437bf841e435aa3921ed2c909c2eafcba7b78922
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 24, 2026.
Transparency logRelease files / eigenpal-0.20.7-py3-none-any.whl
| Download URL | eigenpal-0.20.7-py3-none-any.whl |
|---|---|
| Size | 460.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
a024aa33971dc97631ac91db174abee8ec6a598d285de48e9fea88d1dccacf3b
|
|
BLAKE2b-256 checksum How to use checksums |
3fa24327b414b85ce6949dab1cd5d75e49ec811a576f907d4f65a36f13359191
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 24, 2026.
Transparency log