Typed. Async-first. Built for production.
One typed Python client for every product on the platform. Pydantic v2 throughout, idempotency keys handled for you, evidence verification a single call — with a matching CLI for the moments code is overkill.
1from radmah_sdk import AsyncRadMah2 3client = AsyncRadMah(api_key="sl_live_…")4 5# Run Synthesis from a CSV upload6ds = await client.upload_dataset("./customers.csv")7job = await client.create_job(8 kind="synthesize",9 dataset_id=ds.id,10 rows=10_000,11 seed=42,12)13job = await client.get_job(job.id) # poll to succeeded14 15bundle = await client.get_evidence(job.id)16report = await client.verify_job(job.id) # re-verifies every hash17print(bundle.seal_hash)- ▶ uploading customers.csv ………… 4.7 MB
- dataset ds_4a7c81 · 20 cols · 482 931 rows
- ▶ POST /v1/client/jobs/ 202
- job_9b3df1 · estimate 38 s · 14 credits
- ▶ training the engine on 17 numeric / 3 cat …
- epoch 12 / 20 loss 0.083
- epoch 20 / 20 loss 0.041
- ▶ generating 10 000 rows ………… 1.6 s
- ✓ K-S gate 0.018 · χ² gate ok · constraints ok
- ▶ fetching evidence bundle …
- ✓ chain verified root a4f2…d801
- >>> 0.9569
- Type coverage
- 100%
- Python
- 3.11+
- Notebooks
- 6
- Wheel
- signed
Six things every SDK call guarantees.
The same guarantees whether you're uploading a CSV or driving the agentic workflow. No surprises, no hidden retries, no untyped JSON blobs.
100% typed
Pydantic v2 models for every request and response. mypy-strict on the client. Your IDE knows every field.
Async-first
Every method is awaitable. Sync wrappers exist where you need them, but async is the primary surface.
Idempotency built in
Idempotent retries on POSTs out of the box; the SDK manages your Idempotency-Key for you.
Streaming evidence
First-class helpers to subscribe to evidence-chain events and verify the BLAKE3 hash chain offline.
Contract-test runner
Drop the contract runner into your CI to lock the SDK↔API contract — caught upstream, not in prod.
Matching CLI
Every SDK call has a rady CLI sibling for shell pipelines, one-off ops, and the interactive REPL. See /developer/cli.
From pip install to a signed bundle in 30 seconds.
pip install radmah-sdk radmah-cli
rady auth login # OS-keyring credential, one-time
# Reviewed Fabricate dataset via the SDK
python3 -c "
from radmah_sdk import RadMahClient
c = RadMahClient(api_key='sl_live_...')
pv = c.create_fabricate_preview(
'200 SaaS accounts MRR 50-5000',
requested_records=200, seed=42,
)
c.wait_fabricate_preview(pv['preview_id'])
ap = c.approve_fabricate_preview(pv['preview_id'])
job = c.get_job(ap['job_id'])
print(job.wait().to_dataframe().head())
"
# Or scripted via the CLI
PV=$(rady fabricate preview "200 SaaS accounts MRR 50-5000" -n 200 -q)
rady fabricate approve $PV -n 200 -o mock.csv
# Verify any evidence bundle offline
rady evidence download <job-id> -o bundle.json
rady evidence verify bundle.jsonSix reference notebooks. One per product surface.
01-fabricate.ipynb
Preview, refine, and approve a sealed dataset from a prompt.
02-synthesize.ipynb
Train it on a CSV upload, fetch the bundle.
03-agent.ipynb
Drive the Agentic Data Scientist end-to-end.
04-scada.ipynb
Spin up a Virtual SCADA run, capture telemetry.
05-evidence.ipynb
Verify any bundle, walk the BLAKE3 hash chain offline.
06-webhooks.ipynb
Receive signed events, validate signatures.
Language support, version policy.
| Surface | Versions | Status |
|---|---|---|
| Python | 3.11 – 3.13 | stable |
| Async | asyncio, anyio | stable |
| Pydantic | v2.x | required |
| HTTP | httpx 0.27+ | vendored |
| TypeScript SDK | Q3 | in design |
| Go SDK | Q4 | planned |
One install. Every product surface.
Bring an OpenAPI test suite if you have one, drop the contract runner into your CI, and you can ship in a day.