Request hooks

Register during init — see each page for examples.

Request stack diagram

HTTP request stack

Client request
    │
    ▼
response_middleware (pass-through on request; mutates JSON on response)
    │
    ▼
request.intercept hooks (outer — auth, rate limits, early reject)
    │
    ▼
middleware.inject hooks (inner — tracing, header checks)
    │
    ▼
handle_request (debug logging)
    │
    ▼
Axum router (core routes + plugin routes)

Request hooks receive method, path, headers as JSON, and body bytes. Headers use lowercase keys. authorization is redacted.

Route patterns use prefix matching: /api/* matches /api/system, /plugins/hello matches exactly that path prefix chain.

Plugin routes register during init and merge into the same router as core API routes.