For engineers integrating us

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.

Read the quickstart
radmah-quickstart.ipynbpython 3.11
cell · in[1]
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)
stream · out[1]
  • ▶ 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

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
Python 3.11+async-firstPydantic v2100% typed
Open Python SDK

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
OpenAPI 3.1IdempotencyWebhooksVersioned
Open REST API

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
rady binaryinteractive REPLCI-readyoffline verifier
Open rady CLI

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
14 adaptersVaulted credsBrowse + import4-call contract
Open Connectors
◆ The contract

See the contract before you wire it.

The REST request/response pair and the webhook-signature flow, exactly as they land on the wire.

api.radmah.ai / v1 / synthesize / jobsopenapi 3.1
POST/v1/synthesize/jobs
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
}
202Accepted
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"
  }
}
job.synthesize.completed
5 min replay window
  1. 01
    SLT signs payload
    cryptographic hash(payload || ts || rolling_key)
  2. 02
    Webhook delivered
    POST your endpoint with headers
  3. 03
    You verify
    verify(payload, sig, key)
  4. 04
    Process if ok, 401 if not
    no signature → reject silently
X-SLT-Signature: cryptographic hash=2d4a8f… ts=1718834012
X-SLT-Event: job.synthesize.completed
◆ Posture & auth

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 in

Jump straight to it.

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.

Read the quickstartSee the SDK reference