Typed requests, idempotency and streamed events across five languages. Same API, same limits, same trace — no hand-written HTTP in your app.
import { Lattice } from "@lattice/sdk";const lattice = new Lattice({ apiKey: process.env.LATTICE_API_KEY,});const run = await lattice.runs.create({ workflow: "invoice-reminder", version: "v3", input: { invoiceId: "inv_8fK2mQ", dueIn: "3d", }, idempotencyKey: "invoice-8fK2mQ-reminder-1",});console.log(run.id, run.status);npm install @lattice/sdk{ "id": "run_4nT8xWq2", "object": "workflow.run", "status": "queued", "workflow": "invoice-reminder", "version": "v3", "input": { "invoiceId": "inv_8fK2mQ", "dueIn": "3d" }, "attempt": 1, "region": "fra1", "created_at": "2026-11-07T14:32:08.114Z", "trace_id": "trc_9pR3kL7d", "links": { "self": "https://api.lattice.dev/v1/runs/run_4nT8xWq2", "events": "https://api.lattice.dev/v1/runs/run_4nT8xWq2/events" }}MIT licensed · Node 20+, Bun, Deno and Workers · signed releases
Response loaded. 200 OK in 184 milliseconds.