MCP adapternot yet implemented — §9 treats MCP as an adapter over this same REST core, not the core itself; discovery today is via the tool declaration above
CLInot yet implemented — curl/SDK are the current interfaces
Webhook relaynot yet implemented
Error codes
INVALID_TIME_VALUE400
malformed, missing, or out-of-range input value
UNKNOWN_ENCODING400
encoding not recognized (unix_s|unix_ms|unix_us|unix_ns|rfc3339)
INVALID_TIMEZONE400
not a valid IANA timezone name
NONEXISTENT_LOCAL_TIME400
DST spring-forward gap — this local time never occurred
AMBIGUOUS_LOCAL_TIME400
DST fall-back overlap — this local time occurred twice
UNSUPPORTED_POLICY400
invalid rate/system policy in a custom system definition
UNKNOWN_SYSTEM404
no such custom system id
UNKNOWN_GROUP404
no such Temporal Group id
UNKNOWN_WORKSPACE404
no such Shared Workspace id
UNKNOWN_PROVIDER404
no such OAuth sign-in provider
AUTH_DISABLED503
this deployment has no client id/secret configured for that provider
AUTH_DENIED400
the sign-in provider returned an error (e.g. the user cancelled)
AUTH_STATE_INVALID400
OAuth state missing/expired/reused — restart the sign-in flow
AUTH_PROVIDER_ERROR502
the OAuth provider's token or userinfo endpoint failed
NOT_AUTHENTICATED401
no active session — sign in first
FORBIDDEN403
authenticated, but not the owner of this resource
UNKNOWN_INSTANT404
no such registered instant id
UNKNOWN_TRANSFORM404
no such transform type id
REGISTRY_UNAVAILABLE503
CTCL_KV not bound on this deployment
SIGNING_DISABLED503
no Ed25519 signing key configured (CTCL_SIGN_KEY unset)
RATE_LIMITED429
over 120 requests/min for this IP on /v1/*
NOT_FOUND404
unknown route
Version policy
All routes here are v1. The response envelope shape
({ok, data, meta} / {ok:false, error, meta}) will not change within v1 — new
optional fields may be added, but existing fields won't be removed or repurposed. A breaking change would
ship as /v2, not a silent mutation of /v1.
Changelog
2026-07-14Shared Workspaces (/v1/workspaces) + Google/GitHub sign-in (§Phase 5) — owned workspaces are protected, everything else stays accountless; QR Code on Share Instant (§6.6); every persisted resource type Ed25519-signed (§31.1); tai/gps timescales now leap-aware via the full 1972-2017 historical offset table
2026-07-12Registered instants (/v1/instants) now Ed25519-signed (§31); SDK gained monotonic() (§32), guardedNow() rollback detection (§33), offlineNow() degraded mode (§39), and a maxAgeMs staleness check in verifyInstant()
2026-07-11Constraint Planner, Semantic Resolution, Share Instant, Boundary Inspector, Temporal Groups — CommonInstant Web whitepaper P1–P6