Changelog
Euler publishes customer-facing API and SDK changes from the committed OpenAPI
contract at openapi/euler.openapi.json. The current public contract is API v1
with OpenAPI 3.1.0 and package version 0.1.0.
Unreleased
Annotation, readiness, curation and copilot surfaces. These routes are live on the hosted API and present in the committed contract; the package version has not yet been bumped, so they are listed here rather than under a release.
- Annotation layer catalog. Twelve catalogued layers, eleven of them
servable, with per-project modes (
in_run,on_demand,off), per-layer configuration, presets and a cost preview:GET/PUT /v1/projects/{id}/annotation/settings,PUT /v1/workspaces/{id}/annotation/settings. The 3D representation layer is catalogued and held back because its lane is not deployed; it is pinned off and enqueuing it returns422. Presets are now scoped to the use case and data they were written for. See annotation layers and pipeline settings. - Annotation jobs. Heavy layers run through an async queue rather than a
synchronous request:
POST/GET /v1/projects/{id}/annotation/jobs, an SSE progress feed at/annotation/jobs/stream, plus per-job read and cancel. The existing synchronous per-episode endpoints are unchanged. See annotation jobs. - Job lifecycle rules. A re-queue over recordings that already carry a
layer’s output returns
409with a structuredalready_produceddetail naming them, unlessforce: trueis sent; partial coverage narrows the job to the recordings that need it. A queued or running job for the same project and layer is returned rather than duplicated. Cancel works from queued and running alike and retains the work already finished. - Automated review pass.
annotation_reviewruns as a job layer and records a graded verdict per annotation layer, with evidence, improvements and an explicit not-assessable where nothing could be judged. It has no pipeline settings tile because it produces no annotation. See automated review pass. - Utility and proxy metrics.
GET /v1/projects/{id}/utilitysplits readiness into integrity, semantic quality and utility and reports the proxy metrics under the semantic layer.POST /v1/projects/{id}/ablationcompares raw, readiness-filtered and curated subsets by composition.GET /v1/projects/{id}/distribution-gapranks what the dataset under-covers. None of them claim a training result without a measured probe run. See data utility. - Project ontology summary.
GET/PUT /v1/projects/{id}/ontology/summaryreports the classes actually found with their property distributions, joined against what the workspace declared, and accepts renames, merges and declared-class edits. - Model registry corrections. The registry now names what the accelerator
actually serves: optical flow runs
torchvision/raft_large, semantic segmentation runstue-mps/coco_panoptic_eomt_large_640, and body pose runsrtmlib/wholebody.GET /v1/modelsreports the same. - Annotation status and coverage.
GET /v1/projects/{id}/annotation/statusreports what ran per layer;GET /v1/projects/{id}/annotation/coveragereports per-layer, per-kind coverage and the quality signal each layer measured. - Readiness settings.
GET/PUT /v1/projects/{id}/readiness/settingsserves the readiness check catalog resolved for a project and stores per-project differences from the defaults. Threshold offsets and weight overrides are clamped. See readiness. - Curation plans.
GET /v1/projects/{id}/curation/strategies,POST /curation/preview,POST /curation/applyandGET /curation/recommendreplace the single-movePOST /v1/projects/{id}/curate, which still works. See curation. - Euler Copilot.
POST /v1/copilot/chatstreams an agentic turn as SSE, with/copilot/models,/copilot/suggestions,/copilot/supportand/copilot/threadsalongside it. See Euler Copilot.
0.1.0
Initial Phase 2 public integration release.
- Hosted API base:
https://api.euler.sudotank.com - OpenAPI artifact:
openapi/euler.openapi.json - Python SDK package:
euler-sdk - TypeScript SDK package:
@sudotank/euler-sdk - Docs: overview, concepts, API reference, 15-minute quickstart, MCP quickstart, changelog, and migrations
The v1 API covers tenant project/source registration, command-led run planning, episode/export reads, deterministic Ask Euler summaries, and generated SDKs. Transform recipes, chunk bridge plans, and MCP tools are documented as local package or agent surfaces until hosted REST endpoints are explicitly added to the OpenAPI contract. Search and saved slices have since been added as hosted REST endpoints; see the unreleased section above and the API reference.
SDK releases
The sdk-release workflow validates generated artifacts on tag pushes and
manual runs:
uv run python tools/sdk/generate.py --checkcd sdks/typescript && npm ci && npm run buildpython -m compileall -q sdks/python/src
Publishing is gated by repository secrets. If NPM_TOKEN is unset, npm publish
prints Skipping npm publish: NPM_TOKEN is not configured. and exits cleanly. If
PYPI_API_TOKEN is unset, PyPI publish prints Skipping PyPI publish: PYPI_API_TOKEN is not configured. and exits cleanly. Non-tag workflow runs also
skip publishing.
Compatibility
Euler treats the OpenAPI file as the source of truth for hosted API consumers. Within v1:
- adding optional response fields is backwards compatible;
- adding optional request fields is backwards compatible;
- changing required fields, enum values, authentication behavior, route paths, or response semantics requires a migration guide entry;
- SDK generation drift must be fixed before release.
There is no shipped v2 API yet. Future v2 work must add a dated changelog entry, a migration guide, regenerated SDKs, and release notes before the new contract is advertised.