Python SDK
The Python SDK does two things. run runs a script and gives you its
result in one call, however long it takes. And every API operation is a
typed method, so your editor knows each keyword and answer. It needs
Python 3.10 or later.
Install
Section titled “Install”pip install reminixSet REMINIX_API_KEY to a key from API keys in the app.
Run a script
Section titled “Run a script”from reminix import Reminix
reminix = Reminix() # reads REMINIX_API_KEY
run = reminix.run("monthly-report", {"month": "2026-09"})print(run["output"])run answers when the script has finished:
- A long run keeps going after the call.
runchecks on it until it ends. - A run that needs a person’s approval waits for them. Pass
on_approvalto show them where to approve it:reminix.run(slug, inputs, on_approval=notify). - A run that fails, or whose approval is turned down, raises a
RunError. Itsrunhas the status and the error. - To get the run back at once instead, pass
wait=False. - To make calling again safe, such as from a job that reruns, pass
idempotency_key=. The same key and inputs answer with the first run instead of starting another.
The inputs are the script’s own fields, named as the script names them.
Files in and out
Section titled “Files in and out”Give a file input as a path, an open file, or a FileUpload. The SDK
uploads it first and passes its id. Here the monthly report takes an
optional CSV file of manual adjustments, and writes the report as a CSV
file:
from pathlib import Path
from reminix import Reminix
reminix = Reminix()
run = reminix.run( "monthly-report", {"month": "2026-09", "adjustments": Path("adjustments.csv")},)for file in run.get("files") or []: if file["direction"] == "out": print(file["name"], file["downloadUrl"])The files a run writes come back in run["files"], each with a download
link. See Files.
Methods
Section titled “Methods”Each API operation is a method, named like its command in the
CLI: reminix runs list is
reminix.runs.list().
from reminix import Reminix
reminix = Reminix()
scripts = reminix.scripts.list()recent = reminix.runs.list(script="monthly-report", limit=10)reminix.schedules.create( "monthly-report", name="First of the month", cron="0 8 1 * *", timezone="Europe/London",)- Ids in the path are arguments, and everything else is a keyword, in Python’s style. Answers keep the API’s own names.
- A method returns the response’s data. A failure raises an
ApiErrorwith the error’scode,message,statusandrequest_id. - Every write sends an idempotency key, and a
failed attempt (a network error, a timeout, a
5xx, a429) is retried with the same key, so it happens once. To make your own retry safe too, pass your key:request_options={"idempotency_key": key}. - A request waits up to 60 seconds for an answer (
timeout=).
Every method, linked to its fields and a full example under Endpoints:
Scripts
| Method | What it does |
|---|---|
reminix.scripts.archive() | Archive a script |
reminix.scripts.create() | Create a script |
reminix.scripts.get() | Get a script |
reminix.scripts.list() | List scripts |
reminix.scripts.restore() | Restore an archived script |
reminix.scripts.update() | Change a script |
Runs
| Method | What it does |
|---|---|
reminix.runs.cancel() | Cancel a run |
reminix.runs.create() | Run a script |
reminix.runs.get() | Get a run |
reminix.runs.list() | List runs |
reminix.runs.logs() | Get a run's log |
Versions
| Method | What it does |
|---|---|
reminix.script_versions.create() | Upload a version |
reminix.script_versions.list() | List a script's versions |
reminix.script_versions.publish() | Publish a version |
reminix.script_versions.run() | Test-run a version |
Schedules
| Method | What it does |
|---|---|
reminix.schedules.create() | Schedule a script |
reminix.schedules.delete() | Delete a schedule |
reminix.schedules.list() | List a script's schedules |
reminix.schedules.update() | Change a schedule |
Triggers
| Method | What it does |
|---|---|
reminix.triggers.create() | Run a script on an event |
reminix.triggers.delete() | Delete a trigger |
reminix.triggers.list() | List a script's triggers |
reminix.triggers.update() | Change a trigger |
Files
| Method | What it does |
|---|---|
reminix.files.download() | Download a file |
reminix.files.get() | Get a file |
reminix.files.list() | List files |
reminix.files.upload() | Upload a file |
Environments
| Method | What it does |
|---|---|
reminix.environments.create() | Add an environment |
reminix.environments.delete() | Delete an environment |
reminix.environments.get() | Get an environment |
reminix.environments.list() | List environments |
reminix.environments.update() | Change an environment |
Secrets
| Method | What it does |
|---|---|
reminix.secrets.delete() | Delete a secret |
reminix.secrets.list() | List secrets |
reminix.secrets.set() | Save a secret |
reminix.secrets.unset() | Remove a secret's value from an environment |
Script settings
| Method | What it does |
|---|---|
reminix.script_settings.get() | Get the workspace's script settings |
reminix.script_settings.update() | Change the workspace's script settings |
Workspace
| Method | What it does |
|---|---|
reminix.workspace.get() | Get the current workspace |
reminix.workspace.invitations.list() | List pending invitations |
reminix.workspace.members.list() | List workspace members |
reminix.workspace.teams.list() | List teams |
reminix.workspace.usage() | Get your plan's usage this period |
Webhooks
| Method | What it does |
|---|---|
reminix.workspace.event_types.list() | List event types |
reminix.workspace.webhook_deliveries.list() | List an endpoint's deliveries |
reminix.workspace.webhook_deliveries.redeliver() | Redeliver an event |
reminix.workspace.webhook_endpoints.create() | Add a webhook endpoint |
reminix.workspace.webhook_endpoints.delete() | Remove a webhook endpoint |
reminix.workspace.webhook_endpoints.enable() | Re-enable a webhook endpoint |
reminix.workspace.webhook_endpoints.get() | Get a webhook endpoint |
reminix.workspace.webhook_endpoints.list() | List webhook endpoints |
reminix.workspace.webhook_endpoints.test() | Send a test event |
Approvals
| Method | What it does |
|---|---|
reminix.workspace.approval_actions.list() | List the actions you can ask approval for |
reminix.workspace.approval_requests.create() | Ask a person to approve an action |
reminix.workspace.approval_requests.get() | Check an approval request |
reminix.workspace.approval_requests.redeem() | Redeem an approved request |
Audit events
| Method | What it does |
|---|---|
reminix.workspace.audit_events.list() | List workspace audit events |
Personal access tokens
| Method | What it does |
|---|---|
reminix.user.me() | Get the current user |
reminix.user.revoke_token() | Revoke the token making this request |
AsyncReminix has the same methods, to await:
from reminix import AsyncReminix
async def monthly_report(month: str) -> object: async with AsyncReminix() as reminix: run = await reminix.run("monthly-report", {"month": month}) return run["output"]Your key
Section titled “Your key”Reminix()reads your key from theREMINIX_API_KEYenvironment variable. Without it, it raises an error naming the variable. To pass the key yourself:Reminix(token=key).- With an API key, every call acts in the key’s workspace.
- With a personal access token, name the workspace:
Reminix(token=token, workspace="acme").