Skip to main content
Demo mode lets you explore every Fabro API endpoint without configuring authentication, running real workflows, or connecting external services. Every response returns realistic static data so you can build and test integrations against a predictable dataset.

How It Works

Demo mode is activated per-request by sending a header:
X-Fabro-Demo: 1
When the server receives this header, it routes the request to a parallel set of demo handlers that return static JSON instead of hitting the real backend. Authentication is bypassed — no JWT or mTLS credentials are needed. Requests without the header are routed to the real API as usual, so demo and production traffic coexist on the same server.

Using Demo Mode

With curl

curl http://localhost:3000/runs -H "X-Fabro-Demo: 1"

With the Web UI

Set the FABRO_DEMO=1 environment variable when starting the web app. This configures the frontend to send the X-Fabro-Demo: 1 header on every API request and disables authentication in the UI:
FABRO_DEMO=1 bun run dev

What Demo Mode Covers

Demo mode implements every API endpoint. Read endpoints return static data representing a realistic workspace with completed runs, workflows, sessions, verifications, and more. Write endpoints (creating runs, answering questions, sending messages) accept the request and return a canned response without persisting any state.
Endpoint groupBehavior
RunsLists and detail views return static run data across multiple statuses
WorkflowsReturns sample workflow definitions and associated runs
SessionsReturns sample chat sessions with message history
Human-in-the-LoopQuestions return static data; answers are accepted but not stored
Run OutputsCompare, usage, and verifications return realistic static results
Run InternalsStages, turns, checkpoints, context, and configuration all return static data
VerificationsCategories and controls with pass/fail examples
InsightsSaved queries and history; execute returns a canned result
RetrosRetrospective data for completed runs
ProjectsSample projects and branches
SettingsPlatform configuration

Limitations

  • No state changes. Write operations return a success response but nothing is persisted. Creating a run returns a fixed ID; it won’t appear in subsequent list calls.
  • No SSE streaming. Event stream endpoints (/runs/{id}/events, /sessions/{id}/events) return immediately rather than streaming.
  • Static data only. The same data is returned regardless of path parameters — requesting any run ID returns the same run detail.