API reference
The hosted API is at https://api.euler.sudotank.com. It serves its own schema and interactive explorer:
https://api.euler.sudotank.com/openapi.json
https://api.euler.sudotank.com/docs
The versioned contract is committed at openapi/euler.openapi.json. Generated clients live in sdks/typescript and sdks/python; release tags publish them only when the repository has npm and PyPI tokens configured.
This page maps the surfaces by area. It is a map, not a substitute for the schema: request and response shapes come from openapi.json.
Conventions
- Everything under
/v1 is tenant-scoped. The tenant comes from the caller’s principal, never from a path or query parameter.
- Roles form an ordered ladder:
viewer < reviewer < engineer < admin. Reads generally need viewer, ingest and pipeline writes need engineer, review decisions need reviewer, and tenant administration needs admin.
- Mutations are recorded in the audit log.
- Errors use standard codes.
402 means the tenant’s weekly model budget would be breached, 409 means a conflicting state such as a layer that is turned off, and 422 means the request named something the platform does not recognise.
export EULER_BASE_URL="https://api.euler.sudotank.com"
export EULER_TOKEN="…"
curl -fsS -H "Authorization: Bearer $EULER_TOKEN" "$EULER_BASE_URL/v1/projects"
Health
| Method | Path |
|---|
| GET | /healthz |
| GET | /readyz |
| GET | /openapi.json |
Tenancy, identity and access
| Method | Path |
|---|
| POST · GET | /v1/tenants |
| POST | /v1/login |
| POST | /v1/signup |
| POST · GET | /v1/users |
| PATCH | /v1/users/{email} |
| POST · GET | /v1/invites |
| POST | /v1/invites/{invite_id}/resend |
| POST | /v1/invites/{invite_id}/revoke |
| GET | /v1/invites/lookup |
| POST | /v1/invites/accept |
| POST · GET | /v1/tokens |
| POST | /v1/tokens/refresh |
| GET | /v1/audit |
| POST | /v1/secrets/seal |
Workspaces and projects
| Method | Path |
|---|
| GET | /v1/use-cases |
| POST · GET | /v1/workspaces |
| PUT | /v1/workspaces/{workspace_id}/use-case |
| POST · GET | /v1/projects |
| GET · DELETE | /v1/projects/{project_id} |
| PUT | /v1/projects/{project_id}/name |
| PUT | /v1/projects/{project_id}/workspace |
| PUT | /v1/projects/{project_id}/data-kind |
| PUT | /v1/projects/{project_id}/target-profile |
| GET | /v1/target-profiles |
| GET | /v1/source-formats |
Sources, uploads and runs
| Method | Path |
|---|
| POST · GET | /v1/projects/{project_id}/sources |
| POST | /v1/projects/{project_id}/sources/upload |
| PUT | /v1/projects/{project_id}/sources/{source_id}/name |
| POST | /v1/projects/{project_id}/sources/{source_id}/test-connection |
| DELETE | /v1/projects/{project_id}/sources/{source_id} |
| POST | /v1/projects/{project_id}/uploads |
| PUT | /v1/projects/{project_id}/uploads/{upload_id}/artifact |
| POST · GET | /v1/projects/{project_id}/runs |
| POST | /v1/projects/{project_id}/runs/{run_id}/cancel |
| POST · GET | /v1/projects/{project_id}/runs/{run_id}/actions |
| GET | /v1/projects/{project_id}/runs/{run_id}/checkpoints |
| POST | /v1/projects/{project_id}/runs/{run_id}/checkpoints/resolve |
| POST | /v1/projects/{project_id}/runs/{run_id}/ask |
| POST | /v1/projects/{project_id}/command |
Annotation
See , , and the .
| Method | Path | Notes |
|---|
| GET · PUT | /v1/projects/{project_id}/annotation/settings | Resolved layer catalog; write modes, per-layer config, model choice and presets |
| PUT | /v1/workspaces/{workspace_id}/annotation/settings | Workspace defaults |
| GET | /v1/projects/{project_id}/annotation/status | What actually ran, per layer |
| GET | /v1/projects/{project_id}/annotation/coverage | Per-layer, per-kind coverage and quality; ?layer=, ?kind= |
| POST · GET | /v1/projects/{project_id}/annotation/jobs | Enqueue (202) and list. 409 already_produced unless force: true |
| GET | /v1/projects/{project_id}/annotation/jobs/stream | SSE progress feed |
| GET | /v1/projects/{project_id}/annotation/jobs/{job_id} | One job |
| POST | /v1/projects/{project_id}/annotation/jobs/{job_id}/cancel | Cancel from queued or running |
| GET · PUT | /v1/projects/{project_id}/ontology/summary | Observed classes with property distributions, joined against the declared ontology; rename, merge and declared-class edits |
annotation_review is a valid layer_id on the jobs endpoint and is not an annotation-catalog layer; it grades what the other layers produced.
Synchronous per-episode annotation surfaces remain available alongside the queue:
| Method | Path |
|---|
| POST | /v1/projects/{project_id}/perception |
| PATCH | /v1/projects/{project_id}/episodes/{episode_id}/annotation |
| PUT | /v1/projects/{project_id}/episodes/{episode_id}/labels |
| POST | /v1/projects/{project_id}/episodes/{episode_id}/labels/agent |
| POST · PUT | /v1/projects/{project_id}/episodes/{episode_id}/dense-text |
| POST | /v1/projects/{project_id}/episodes/{episode_id}/video/hand-pose |
| POST | /v1/projects/{project_id}/episodes/{episode_id}/video/track |
| POST · PUT | /v1/projects/{project_id}/episodes/{episode_id}/video/subtasks |
| PUT | /v1/projects/{project_id}/episodes/{episode_id}/video/tracks |
| POST | /v1/projects/{project_id}/episodes/{episode_id}/video-quality |
| POST | /v1/projects/{project_id}/episodes/hand-overlay |
| PUT | /v1/projects/{project_id}/ontology |
| GET · PUT | /v1/workspaces/{workspace_id}/label-ontology |
Readiness, utility and certification
See and .
| Method | Path |
|---|
| GET · PUT | /v1/projects/{project_id}/readiness/settings |
| GET | /v1/projects/{project_id}/utility |
| POST | /v1/projects/{project_id}/ablation |
| GET | /v1/projects/{project_id}/distribution-gap |
| GET | /v1/projects/{project_id}/target-readiness |
| GET | /v1/projects/{project_id}/data-strategy |
| GET | /v1/projects/{project_id}/vision-audit |
| GET · POST | /v1/projects/{project_id}/certification/policies |
| GET | /v1/projects/{project_id}/certification/report |
| GET | /v1/projects/{project_id}/certification/report.html |
| POST | /v1/projects/{project_id}/certification/export |
| POST | /v1/projects/{project_id}/certification/import |
| POST | /v1/projects/{project_id}/certification/audits |
| Method | Path |
|---|
| GET | /v1/projects/{project_id}/episodes |
| POST | /v1/projects/{project_id}/episodes/{episode_id}/decision |
| POST | /v1/projects/{project_id}/review/reroute |
| GET | /v1/projects/{project_id}/episodes/{episode_id}/media |
| POST | /v1/projects/{project_id}/episodes/{episode_id}/media-token |
| GET | /v1/projects/{project_id}/episodes/{episode_id}/media-stream |
Search, slices and curation
See and the .
| Method | Path |
|---|
| POST | /v1/projects/{project_id}/search |
| POST | /v1/projects/{project_id}/search/reindex |
| POST · GET | /v1/projects/{project_id}/slices |
| GET | /v1/projects/{project_id}/curation/strategies |
| POST | /v1/projects/{project_id}/curation/preview |
| POST | /v1/projects/{project_id}/curation/apply |
| GET | /v1/projects/{project_id}/curation/recommend |
| POST | /v1/projects/{project_id}/curate |
| POST | /v1/projects/{project_id}/feedback/suggestions |
| POST | /v1/projects/{project_id}/feedback/close-loop |
Exports
| Method | Path |
|---|
| POST · GET | /v1/projects/{project_id}/exports |
| DELETE | /v1/projects/{project_id}/exports/{export_id} |
| POST | /v1/projects/{project_id}/exports/{export_id}/seal |
| GET | /v1/projects/{project_id}/exports/{export_id}/download |
| GET | /v1/projects/{project_id}/exports/{export_id}/artifact |
| GET | /v1/projects/{project_id}/exports/{export_id}/archive |
| POST | /v1/projects/{project_id}/reexport |
Copilot
See .
| Method | Path |
|---|
| POST | /v1/copilot/chat (SSE) |
| GET | /v1/copilot/models |
| GET | /v1/copilot/suggestions |
| POST · GET | /v1/copilot/support |
| GET | /v1/copilot/threads |
| GET · DELETE | /v1/copilot/threads/{thread_id} |
The earlier planning surface remains available:
| Method | Path |
|---|
| POST | /v1/agent/plan |
| POST | /v1/agent/execute |
Models, budget and cost
| Method | Path |
|---|
| GET | /v1/models |
| PUT | /v1/models/{surface} |
| GET · PUT | /v1/budget |
| GET | /v1/costs |
| POST | /v1/costs/simulate |
GET /v1/models returns the active model per surface with its adoption evidence, cost note and vetted alternatives. PUT accepts only a vetted option on a user-selectable surface.