Skip to content

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.

Terminal window
pip install reminix

Set REMINIX_API_KEY to a key from API keys in the app.

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. run checks on it until it ends.
  • A run that needs a person’s approval waits for them. Pass on_approval to 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. Its run has 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.

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.

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 ApiError with the error’s code, message, status and request_id.
  • Every write sends an idempotency key, and a failed attempt (a network error, a timeout, a 5xx, a 429) 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

MethodWhat 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

MethodWhat 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

MethodWhat 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

MethodWhat 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

MethodWhat 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

MethodWhat 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

MethodWhat 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

MethodWhat 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

MethodWhat it does
reminix.script_settings.get()Get the workspace's script settings
reminix.script_settings.update()Change the workspace's script settings

Workspace

MethodWhat 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

MethodWhat 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

MethodWhat 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

MethodWhat it does
reminix.workspace.audit_events.list()List workspace audit events

Personal access tokens

MethodWhat 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"]
  • Reminix() reads your key from the REMINIX_API_KEY environment 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").