SDK, API, connectors. One coherent surface.
A typed Python SDK, an OpenAPI 3.1 REST surface, the rady CLI, and fourteen encrypted source connectors — designed so a single engineer can wire RadMah AI into the data plane in an afternoon.
1from radmah_sdk import Client2 3client = Client(api_key="rm_live_…")4 5# Synthesize from a CSV upload6ds = await client.datasets.upload("./customers.csv")7job = await client.synthesize.run(8 dataset_id=ds.id,9 model="synthesize",10 rows=10_000,11 seed=42,12)13await job.wait()14 15bundle = await client.evidence.fetch(job.id)16assert bundle.verify() # cryptographic hash, offline17print(job.metrics.qa_score)- ▶ uploading customers.csv ………… 4.7 MB
- dataset ds_4a7c81 · 20 cols · 482 931 rows
- ▶ POST /v1/synthesize/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
- SDK typed
- 100%
- REST routes
- 206
- Connectors
- 14
- Webhook sig
- HMAC-SHA256
Four entry points. Same evidence chain.
SDK for engineers, REST for the rest of your stack, the rady CLI for the terminal, and connectors for the data already in your warehouse — every one of them lands on the same sealed evidence pipeline.
Python SDK
Typed, async-first Python for the whole platform.
First-class Python SDK with full type hints, async-first primitives, and one object model that matches the REST surface. Reference notebooks, integration tests, and a contract-test runner you can drop into CI the same afternoon you install it.
- Idempotent request keys built in
- Streaming evidence verification helpers
- Reference workflows for every product surface
REST API
OpenAPI 3.1, signed payloads, per-tenant rate limits.
An OpenAPI 3.1 surface with per-tenant rate limits, idempotency keys, signed webhook payloads, and a stable v1 contract. Use it directly when the SDK doesn't fit your stack, or when another service in your platform is already fluent in REST and you just want a clean integration point.
- JWT + scoped API keys (read / generate / admin)
- Per-route + per-tenant rate limits with retry-after
- HMAC-signed webhook signatures for every event
rady CLI
One binary. Every engine. Scripts, pipelines, CI.
The rady binary ships with the SDK and gives your terminal a first-class seat at every engine on the platform. Mock data with a one-liner, drive synthesis from a shell script, verify an evidence bundle offline, chat with the assistant from a REPL, wire the whole thing into CI — no notebook, no browser. pip install radmah-cli and you have rady chat, mock, synthesize, scada, ics, evidence, jobs, connectors.
- rady mock -p "…" --rows 200 --seed 42 — one command, real evidence
- rady evidence verify <bundle> — integrity check, offline, exit 0 = intact
- rady chat — interactive assistant with history, cost gates, sealed transcripts
Connectors
14 encrypted source adapters — warehouses, RDBMS, object stores, hubs.
Snowflake, BigQuery, Databricks, Redshift, Postgres, MySQL, MariaDB, MSSQL, Oracle, Hive, S3, GCS, Azure Blob, HuggingFace. Browse, sample, import — credentials vaulted by construction. The same four-call contract across every adapter, so a junior engineer can wire a new source in under an hour.
- Inline passwords auto-hoisted to the encrypted vault
- Browse table / object lists from the UI
- Import jobs run inside the tenant artefact prefix
See the contract before you wire it.
The REST request/response pair and the webhook-signature flow, exactly as they land on the wire.
X-API-Key: slt_live_AbCdEfGh…
X-Idempotency-Key: 8e0c…b21
Content-Type: application/json
{
"dataset_id": "ds_4a7c81",
"model": "synthesize",
"rows": 10000,
"seed": 42
}X-Job-Id: job_9b3df1
X-Rate-Limit-Remaining: 47
Retry-After: —
{
"job_id": "job_9b3df1",
"status": "queued",
"estimate": { "credits": 14, "seconds": 38 },
"evidence": { "expected_root_pending": true },
"_links": {
"self": "/v1/synthesize/jobs/job_9b3df1",
"stream": "/v1/synthesize/jobs/job_9b3df1/events",
"cancel": "/v1/synthesize/jobs/job_9b3df1:cancel"
}
}- 01SLT signs payloadcryptographic hash(payload || ts || rolling_key)→ X-SLT-Signature
- 02Webhook deliveredPOST your endpoint with headers→ X-SLT-Event
- 03You verifyverify(payload, sig, key)→ ts within ±5 min
- 04Process if ok, 401 if notno signature → reject silently→ replay-protected
Posture & auth that survives security review.
Tenant isolation
The JWT carries tenant_id; every query is filtered at the ORM. No cross-tenant fetch is physically possible.
Scoped keys
Read / generate / admin scopes, per-key rate-limit overrides, immediate revocation.
Signed webhooks
HMAC-SHA256 signature with a per-tenant rolling key + timestamp; 5-minute replay window.
Idempotent retries
The Idempotency-Key header is stored 24 h; safe retry on transient 5xx without duplicate work.
Jump straight to it.
SDK reference
Typed Python SDK, request/response shapes, seal verification.
REST API guide
Route groups, auth, idempotency, signed webhooks.
CLI reference
rady chat, rady mock, rady evidence verify, and every subcommand.
Connector catalogue
14 adapters across warehouses, relational, object storage, and HF hub.
Wire it in an afternoon.
SDK from PyPI, the OpenAPI spec from the docs, a contract-test runner ready to drop into your CI. Pick whichever moves you fastest.