DevHelm SDK for Python — typed client for monitors, incidents, alerting, and more
Project description
DevHelm Python SDK
Typed Python client for the DevHelm monitoring API — monitors, incidents, alerting, and more.
Installation
pip install devhelm
Quick Start
from devhelm import Devhelm
client = Devhelm(
token="your-api-token",
org_id="your-org-id",
workspace_id="your-workspace-id",
)
# List all monitors
monitors = client.monitors.list()
for m in monitors:
print(f"{m.name} — {m.type}")
# Create a monitor
monitor = client.monitors.create({
"name": "My API Health",
"type": "HTTP",
"config": {"url": "https://api.example.com/health", "method": "GET"},
"frequencySeconds": 60,
"regions": ["us-east"],
})
# Get a single monitor
monitor = client.monitors.get(monitor.id)
# Pause / resume
client.monitors.pause(monitor.id)
client.monitors.resume(monitor.id)
# Delete
client.monitors.delete(monitor.id)
Configuration
from devhelm import Devhelm
client = Devhelm(
token="your-api-token", # required (or DEVHELM_API_TOKEN env var)
org_id="1", # required (or DEVHELM_ORG_ID env var)
workspace_id="1", # required (or DEVHELM_WORKSPACE_ID env var)
base_url="https://api.devhelm.io", # optional, defaults to production
)
Environment variables are used as fallbacks when constructor arguments are not provided:
| Parameter | Env Variable |
|---|---|
token |
DEVHELM_API_TOKEN |
org_id |
DEVHELM_ORG_ID |
workspace_id |
DEVHELM_WORKSPACE_ID |
Resources
The client exposes the following resource modules:
| Resource | Description |
|---|---|
client.monitors |
HTTP, DNS, TCP, ICMP, MCP, and Heartbeat monitors |
client.incidents |
Manual and auto-detected incidents |
client.alert_channels |
Slack, email, webhook, and other alert channels |
client.notification_policies |
Routing rules for alerts |
client.environments |
Environment grouping (prod, staging, etc.) |
client.secrets |
Encrypted secrets for monitor auth |
client.tags |
Organize monitors with tags |
client.resource_groups |
Logical resource groups |
client.webhooks |
Outgoing webhook endpoints |
client.api_keys |
API key management |
client.dependencies |
Service dependency tracking |
client.deploy_lock |
Deploy lock for safe deployments |
client.status |
Dashboard overview |
Pagination
List methods auto-paginate by default. For manual page control:
# Auto-paginate (fetches all pages)
all_monitors = client.monitors.list()
# Manual page control
page = client.monitors.list_page(page=0, size=20)
print(page.data) # list of monitors
print(page.has_next) # True if more pages
print(page.has_prev) # True if previous page exists
# Cursor pagination (for check results)
results = client.monitors.results(monitor_id, limit=50)
print(results.data)
print(results.next_cursor)
print(results.has_more)
Error Handling
The SDK raises three top-level error types (see
040-codegen-policies.md):
DevhelmValidationError— local request/response shape validation failed.DevhelmApiError— the API returned a non-2xx status. Subclassed by HTTP class for ergonomics:DevhelmAuthError(401/403),DevhelmNotFoundError(404),DevhelmConflictError(409),DevhelmRateLimitError(429),DevhelmServerError(5xx).DevhelmTransportError— the request never reached a server response (connection refused, timeout, TLS failure, etc.).
Every DevhelmApiError carries:
status— the HTTP status codecode— coarse machine-readable category (e.g.NOT_FOUND,RATE_LIMITED); switch on this, not the human-readablemessagerequest_id— the per-request id from theX-Request-Idresponse header; always include this in support tickets
from devhelm import Devhelm, DevhelmAuthError, DevhelmError
client = Devhelm(token="bad-token", org_id="1", workspace_id="1")
try:
client.monitors.list()
except DevhelmAuthError as e:
print(f"Auth failed: {e.message} (HTTP {e.status}, request_id={e.request_id})")
except DevhelmError as e:
print(f"API error [{e.code}]: {e.message}")
Development
# Install dependencies
uv sync
# Run tests
make test
# Lint + format check
make lint
# Type check
make typecheck
# Regenerate types from OpenAPI spec
make typegen
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file devhelm-0.6.0.tar.gz.
File metadata
- Download URL: devhelm-0.6.0.tar.gz
- Upload date:
- Size: 233.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fd99b1ce05553d4e4fcb6dd6bddaa11ce570f1dedf52b5e43f360e8ac6edec29
|
|
| MD5 |
dfd456fdaa0d229e4fd1b53190c28a53
|
|
| BLAKE2b-256 |
ec76bb541d95824fd39ccdcaf7e57afe445cde2b6750636e4853592f90295b44
|
File details
Details for the file devhelm-0.6.0-py3-none-any.whl.
File metadata
- Download URL: devhelm-0.6.0-py3-none-any.whl
- Upload date:
- Size: 73.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0a832fbf50ec7c8847b1c4824fc55e1ef7ea550d9aacadf4b5f91872ea07f0dc
|
|
| MD5 |
13010c934c74570bf06c82f6c580732c
|
|
| BLAKE2b-256 |
b4c1ea62aaf8304231026fd804d93892c42d2fa532676c1039c0a4431183fcb1
|