invoance 0.2.0

Official Rust SDK for the Invoance compliance API
Documentation
//! Traces: create, add events, seal, export the proof bundle.
//!
//! ```bash
//! INVOANCE_API_KEY=inv_live_... cargo run --example traces
//! ```

use invoance::models::{CreateTraceParams, GetTraceParams, IngestEventParams};
use invoance::InvoanceClient;
use serde_json::json;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let client = InvoanceClient::new()?;

    let trace = client
        .traces()
        .create(CreateTraceParams {
            label: "Onboarding run 2026-07".into(),
            ..Default::default()
        })
        .await?;
    println!("trace_id = {}", trace.trace_id);

    // Attach an event to the trace.
    client
        .events()
        .ingest(IngestEventParams {
            event_type: "onboarding.step".into(),
            payload: json!({ "step": "kyc" }).as_object().unwrap().clone(),
            trace_id: Some(trace.trace_id.clone()),
            ..Default::default()
        })
        .await?;

    let detail = client
        .traces()
        .get(&trace.trace_id, GetTraceParams::default())
        .await?;
    println!(
        "status = {}, events = {}",
        detail.status,
        detail.events.len()
    );

    // Seal it (async — returns 202) and then fetch the proof once sealed.
    let sealed = client.traces().seal(&trace.trace_id).await?;
    println!("seal: {}", sealed.message);

    Ok(())
}