Developer Docs

REST Reference

Canonical willaOS REST resources, request/response shapes, and generated reference artifacts.

The canonical REST namespace is /api/*. There is no public /api/v1 contract.

Response Envelope

Most JSON routes return:

{
  "data": {},
  "request_id": "req_..."
}

Validation and auth failures return an error envelope or simple error object depending on legacy route age:

{
  "error": {
    "message": "X-Version header is required"
  },
  "request_id": "req_..."
}

Some file routes return the file body directly instead of a JSON envelope.

Core Resources

ResourceMethodsNotes
/api/clientsGET, POSTList and create client records.
/api/clients/{id}GET, PATCH, DELETERead, update, and soft-delete one client. Mutations use X-Version.
/api/clients/{id}/{field}GET, PUTField-level client reads and writes guarded by field permissions.
/api/clients/{id}/projectsGET, POSTList or create projects under a client.
/api/projectsGETList visible projects.
/api/projects/{id}GET, PATCH, DELETERead, update, and soft-delete one project. Mutations use X-Version.
/api/projects/{id}/documentsGET, POSTProject document list and create.
/api/projects/{id}/workstreamsGET, PATCHFirst-class workstream state and blockers.
/api/projects/{id}/readiness-rollupGETCross-system readiness rollup.
/api/projects/{id}/qa-configGETQA extension project contract.
/api/projects/{id}/qa-itemsGET, POSTCanonical QA item intake and list.
/api/sopsGET, POSTSOP registry.
/api/skillsGETPull-only Skill Library sync metadata.
/api/skills/{slug}GETOne active installable Skill Library bundle with version/checksum metadata.
/api/milestonesGETCross-project milestone list.
/api/meeting-proposalsGET, POSTMeeting availability proposal workflow.
/api/statusGETPublic JSON health check.

The full generated route inventory is in REST Route Inventory. The OpenAPI seed is docs/openapi/willaos-public.json and covers the stable core routes that should be exposed first in hosted reference navigation.

Query And Body Shapes

List routes commonly support limit, cursor, client_id, project_id, status, or route-specific filters. Invalid query params return 400.

Write routes accept JSON bodies validated by local Zod schemas or route-specific domain parsers. Unknown or unsupported fields are ignored only on legacy routes; newer routes reject invalid input.

Request IDs

When a route returns request_id, include it in support or incident reports. It is also the preferred correlation key for audits and logs.