CONSTRUX
Product

The API is the product

The console talks to exactly the same public API as any other consumer. It holds no privileged path into the platform and is subject to the same roles, scopes and attribute rules.

Shape

Command-and-query over project resources. GET /v1/routes lists every endpoint — 285 of them, 30 reachable without a credential — and that list is the documentation rather than a copy of it.

POST  /v1/projects/:projectId/lessons
      Capture a lesson against the project that produced it
POST  /v1/projects/:projectId/quality/plans
      Create an inspection and test plan for a work package
POST  /v1/projects/:projectId/quality/inspections
      Record an inspection against an ITP stage; a failure raises an NCR
POST  /v1/projects/:projectId/quality/ncrs
      Raise a non-conformance
POST  /v1/projects/:projectId/quality/ncrs/:ncrId/close
      Close a non-conformance with a disposition and a justification
POST  /v1/projects/:projectId/quality/snags/:snagId/close
      Close a snag with photographic evidence
POST  /v1/projects/:projectId/cdm/documents
      Draft a project-specific CDM document, naming any section it could not fill
POST  /v1/projects/:projectId/cdm/documents/:documentId/approve
      Approve a CDM document — refused while a required section is unfilled

Errors

RFC 7807 application/problem+json, with per-field detail where a schema rejected the body. Every response carries x-correlation-id and x-trace-id, and a command accepts an Idempotency-Key so a retried request returns the original result rather than performing the state change twice.

{
  "type": "https://construx.ai/problems/access-denied",
  "title": "ACCESS_DENIED",
  "status": 403,
  "detail": "No role of PM holds \"C\" on PROJECT_SETUP",
  "traceId": "…",
  "correlationId": "…"
}

Authentication

Bearer access tokens with a short lifetime and rotating refresh tokens, behind an MFA challenge. A public route may begin an authentication and never complete one — an invariant with a test behind it, because a demonstration endpoint once returned a working session to anonymous callers.

Communication events

177 notification events across 15 categories, fanning out over email, in-app, SMS, push and WhatsApp. 27 of them are mandatory and override a recipient's preferences, because a person is entitled to be told their account was locked whatever they have muted.

What the API will not do

It will not tell you which project ids exist. An id that does not exist and one belonging to another tenancy both answer 200 with an empty list on the generic entity read — a 404 for unknown and a 403 for forbidden would together be an enumeration oracle. That behaviour is tested, so nobody "fixes" it.

Read the route table

Every endpoint, its method, its description and whether it needs a credential.