LizzyDocs

Reference

One contract for humans, SDKs, and agents.

Lizzy exposes a versioned JSON API with predictable envelopes, cursor pagination, idempotent creates, and durable asynchronous resources.

OpenAPI 3.1 is the canonical surface

The public schema includes request and response models, operation IDs, prerequisites, idempotency behavior, durable resource states, and recovery notes. Internal control-plane routes are excluded.

Open /v1/openapi.json

Request conventions

Basehttps://<your-lizzy-host>/v1
AuthAuthorization: Bearer <token>
CreatesIdempotency-Key on creating POST requests
Paginationdata, has_more, and next_cursor
ModeUse test credentials for free sandbox resources; live credentials for production
JSONsnake_case fields and UTF-8 request bodies

Core endpoint inventory

POST/v1/distill/loops

Create the boundary for one optimization journey.

GET/v1/distill/calls

List captured call metadata.

POST/v1/distill/datasets

Create a mutable dataset definition.

POST/v1/distill/datasets/{dataset_id}/versions

Freeze an immutable version.

POST/v1/distill/rewards/{reward_id}/test

Evaluate a reward on supplied or captured examples.

POST/v1/distill/recipes/propose

Propose a scoped recipe without starting compute.

POST/v1/distill/runs

Start a dry or approval-gated live run.

GET/v1/distill/reports/{report_id}

Read evaluation evidence.

POST/v1/distill/deployments

Create a staged rollout proposal.

For exhaustive fields and routes, use the OpenAPI document rather than copying this overview.

Durable asynchronous resources

Dataset versions, uploads, connector pulls, runs, deployments, and sandbox replay can outlive a request. Store the returned ID, poll the resource endpoint with bounded backoff, and stop at its documented terminal state.

Polling patternTypeScript
for (let attempt = 0; attempt < 20; attempt++) {
  const resource = await get("/v1/distill/runs/<run_id>");
  if (["succeeded", "failed", "canceled"].includes(resource.status)) return resource;
  await new Promise((resolve) => setTimeout(resolve, Math.min(1_000 * 2 ** attempt, 10_000)));
}
throw new Error("Watch window ended; keep the run ID and resume later.");
Built for humans and copilots.

Every risky action has an explicit handoff, validation, or approval boundary.

Recovery guide