# QuantDinger Web API (OpenAPI)

Human-facing REST API specification generated from **flask-smorest** (`app/openapi/`).

| File | Purpose |
|------|---------|
| [`openapi.yaml`](openapi.yaml) | Committed SSOT — update via `backend_api_python/scripts/export_openapi.py` |
| [`index.html`](index.html) | Static Redoc viewer — **must be served over HTTP** (see below) |

## View docs locally

ReDoc cannot load `openapi.yaml` when you double-click `index.html` (`file://` is blocked by browser same-origin policy). Use any static server from the repo root or this folder:

```bash
# Python (from docs/api/)
python -m http.server 8080
# open http://localhost:8080/index.html

# or from repo root
cd docs/api && npx --yes serve -p 8080
```

If you see `process is not defined`, refresh after pulling the latest `index.html` (includes a browser shim + pinned ReDoc 2.4.0).

## Conventions

See [`../architecture/API_CONVENTIONS.md`](../architecture/API_CONVENTIONS.md) for envelopes, auth, and Public/Internal tiers.

## Agent API

AI agents use a separate contract: [`../agent/agent-openapi.json`](../agent/agent-openapi.json).

## Regenerate

```bash
cd backend_api_python
pip install -r requirements.txt
python scripts/export_openapi.py
```

## Local interactive docs

With the backend running in debug mode (or `OPENAPI_ENABLED=true`):

- Swagger UI: http://localhost:5000/api/docs/swagger
- ReDoc: http://localhost:5000/api/docs/redoc
