Skip to main content
Stralos uses separate service APIs rather than one monolithic backend. Each service owns a bounded product area and references records from other services by ID.

Service matrix

Boundary rules

  • Global owns shared records used by more than one feature.
  • Module APIs own module-specific records and store foreign IDs for shared records.
  • Documents is a pipeline service, not a simple CRUD service.
  • The shell and feature bundles call services through their configured base URLs.

Common patterns

  • Fastify 5 service boundary.
  • Drizzle and Postgres for relational module data.
  • Zod validation at request boundaries.
  • Most list envelopes use { items, totalCount, start, length }.
  • Global, Estimate, Activities, Documents, Rates, and Assistant require EdDSA bearer authentication on protected routes. They accept user or authorised service tokens.

Authentication prerequisites

The Global API runtime needs its EdDSA signing keys and refresh-session table; consuming services need the Global JWKS URL.

OpenAPI status

The following tenant-facing services serve a machine-readable OpenAPI 3.1 document generated from their route-descriptor registries: Each service keeps a committed contract snapshot and source-level drift and snapshot tests. The internal Admin API also serves a documentation-only OpenAPI contract at GET /api/admin/openapi.json; it is intentionally excluded from the tenant/copilot tool substrate. Services not listed here do not yet serve an OpenAPI document.