Rust SDK
An async reqwest-based client covering /v1 responses and the core /v2 state and diagnostics calls, returning serde_json::Value.
The Rust SDK (zumik-sdk) is a thin async client over reqwest. It covers the core create/append
flow and diagnostics; the wider surface is reachable through the HTTP API
directly.
Add the dependency
[dependencies]
zumik-sdk = "0.1.0"
tokio = { version = "1", features = ["macros", "rt-multi-thread"] }
serde_json = "1"Authenticate
use zumik_sdk::Client;
let client = Client::new("zk_live_...")?;
// or point at another host:
// let client = Client::with_base_url("https://api.zumik.ai", "zk_live_...")?;The key is an explicit argument; the base URL defaults to https://api.zumik.ai. The bearer and
JSON content-type headers are set on the underlying reqwest::Client.
Usage
Every method is async and returns anyhow::Result<serde_json::Value>.
use zumik_sdk::Client;
use serde_json::json;
#[tokio::main]
async fn main() -> anyhow::Result<()> {
let client = Client::new("zk_live_...")?;
let art = client.create_artifact("policy", "Run the linter before every commit.").await?;
let bundle = client.create_bundle(json!({
"items": [{ "artifact_id": art["id"], "role": "system" }]
})).await?;
let session = client.create_session(vec![bundle["id"].as_str().unwrap().to_string()]).await?;
// Append an event with compare-and-swap (the body carries the CAS guards).
let branch_id = session["default_branch_id"].as_str().unwrap();
let event = client.append_event(
session["id"].as_str().unwrap(),
branch_id,
json!({
"expected_version": 0,
"expected_head_event_id": null,
"event": { "event_type": "user_message", "payload_ref": art["id"] }
}),
).await?;
client.create_snapshot(
session["id"].as_str().unwrap(),
branch_id,
vec![
art["id"].as_str().unwrap().to_string(),
event["id"].as_str().unwrap().to_string(),
],
).await?;
let resp = client.create_response("code.balanced", "Review the latest patch.").await?;
println!("{}", resp["id"]);
Ok(())
}Methods
| Method | Endpoint |
|---|---|
create_response<T: Serialize>(model: &str, input: T) | POST /v1/responses |
create_artifact(artifact_type: &str, content: &str) | POST /v2/artifacts |
create_bundle(items: Value) | POST /v2/bundles |
create_session(base_bundle_ids: Vec<String>) | POST /v2/sessions |
append_event(session_id: &str, branch_id: &str, body: Value) | POST .../events |
create_snapshot(session_id: &str, branch_id: &str, manifest: Vec<String>) | POST .../snapshots |
run_diagnostic(traces: Value) | POST /v2/diagnostics |
Error handling
Errors surface as anyhow::Error. On any status ≥ 400 the method returns
Err(anyhow!("zumik api error {status}: {payload}")) - match on the status or parse the payload. The
SDK does not stream or retry.
This SDK does not yet expose native /v2 responses, get/delete, purge, usage, or credentials. For
those, send requests against the HTTP API with your own reqwest::Client.