SteadyLink Python SDK
The official Python client for the SteadyLink API.
Requirements
- Python 3.10 or newer
- A SteadyLink workspace and API key
The package has no runtime dependencies. Management API keys must only be used in trusted server environments.
Installation
python -m pip install steadylink
Quick start
import os
from steadylink import SteadyLink
client = SteadyLink(
api_key=os.environ["STEADYLINK_API_KEY"],
workspace_id=os.environ.get("STEADYLINK_WORKSPACE_ID"),
)
buckets = client.list_buckets()["items"]
Create a scoped API key in Dashboard > Developers. You can use access_token instead of api_key for a signed-in user session. Pass exactly one authentication method.
Upload a file
from pathlib import Path
path = Path("campaign-hero.webp")
data = path.read_bytes()
asset = client.upload_file(
"bucket_id",
filename=path.name,
body=data,
content_type="image/webp",
path="campaign/",
)
upload_file creates an upload session, sends the bytes to the presigned storage URL, and finalizes the upload. SteadyLink credentials are never attached to the storage request.
Replace a file
client.replace_file(
"bucket_id",
"campaign/campaign-hero.webp",
filename=path.name,
body=data,
content_type="image/webp",
)
The replacement creates a new revision. Existing delivery URLs continue to work.
Configuration
client = SteadyLink(
api_key=os.environ["STEADYLINK_API_KEY"],
workspace_id="workspace_id",
base_url="https://api.steadylink.io",
max_retries=2,
)
| Option | Description |
|---|---|
api_key |
Server-side management API key. |
access_token |
User access token. Use this or api_key, not both. |
workspace_id |
Workspace used for workspace-scoped operations. |
base_url |
API origin. Useful for private or preview environments. |
max_retries |
Maximum transient retries. Defaults to 2. |
transport |
Custom JSON transport for testing or alternate runtimes. |
binary_transport |
Custom presigned-upload transport. |
Errors and retries
from steadylink import SteadyLinkError, SteadyLinkNetworkError
try:
client.list_buckets()
except SteadyLinkError as error:
print(error.status, error.code, error.request_id, error.detail)
except SteadyLinkNetworkError as error:
print(str(error))
The client retries 429, 502, 503, and 504 responses for safe HTTP methods. A mutating request is only retried when it carries an idempotency key.
Type checking
The package includes a py.typed marker and inline type annotations for type checkers that implement PEP 561.
Security
- Keep management API keys out of browser bundles, mobile apps, logs, and source control.
- Give each integration the smallest set of scopes it needs.
- Use
upload_to_urlfor presigned storage uploads. It does not attach SteadyLink authentication headers. - Report vulnerabilities through GitHub private vulnerability reporting.
Documentation
Development
python -m pip install build pytest twine
pytest
python -m build
python -m twine check dist/*
See the contributing guide for the development and release process.
License
Metadata
Release files for steadylink 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| steadylink-0.1.0.tar.gz | 8.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| steadylink-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 15.7 kB
Release files / steadylink-0.1.0.tar.gz
| Download URL | steadylink-0.1.0.tar.gz |
|---|---|
| Size | 8.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
9461fc3b0507d2f13543f91b71b711f93741b55d3eb47ddefa465317c7ca05d0
|
|
BLAKE2b-256 checksum How to use checksums |
c679553c6955b63e9db059c2c3903e305459c13d32563d7e2cc2370319d06785
|
| 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 Aug 20, 2026.
Transparency logRelease files / steadylink-0.1.0-py3-none-any.whl
| Download URL | steadylink-0.1.0-py3-none-any.whl |
|---|---|
| Size | 7.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
22b7508689c579d1ce1055ede197eac4203730fb653fbb8dd8351d49b35a0739
|
|
BLAKE2b-256 checksum How to use checksums |
40df36fac23c8cd0a5690623f4c47690171a4a0a1b7a361c10fbeca34bc333eb
|
| 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 Aug 20, 2026.
Transparency log