API
The product API is bearer-authenticated JSON over HTTPS; everything the web app does goes through it, so anything you see in the UI is automatable.
Highlights:
POST /projects·POST /projects/{id}/documents— create and feed bidsPOST /projects/{id}/extract-all-requirements-async+ status pollingGET /usage— credits, per-feature breakdown, legible unitsGET /documents/{id}/original— your uploaded originals, back outGET /export/workspace— your whole workspace as a JSON bundle, any stateGET /onboarding— your first-run checklist, derived from your own workGET/POST /settings/seats·DELETE /settings/seats/{id}— manage your teamGET/PUT /settings/overage-budget— cap monthly overage spendGET /settings/sla— your plan’s support commitmentsPOST /support·GET /support— file and list support tickets- Import endpoints for band rates and BOQ lines (xlsx, dry-run supported)
Platform operators have a privileged surface under /admin (super-admin only):
per-licence billing (/admin/licences/{org}/billing), reconciliation
(/admin/reconcile), overage (/admin/overage), and metrics (/admin/metrics).
Refusals are machine-readable: credit and licence refusals return HTTP 402
with a stable code (hard_cap, tier_not_allowed, subscription_inactive)
alongside the human-readable reason, and successful calls that cross a spend
line say so in X-Quota-* response headers.
OpenAPI reference
Section titled “OpenAPI reference”The full spec is generated from the running service:
- Interactive docs —
/docs(Swagger UI) and/redocon any running instance render every endpoint, schema, and the bearer scheme. - Machine-readable spec —
/openapi.json, also frozen to a versionedopenapi.jsonin the repo (a CI drift-check keeps it current), so you can generate a client without a running server.