helpers/api.py.dox.md
api.py helper module.api.py because this directory is intentionally flat.api.py owns the runtime implementation.api.py.dox.md owns durable notes about responsibilities, contracts, side effects, and verification for that implementation.ApiHandler (no explicit base class)
requires_loopback(cls) -> boolrequires_api_key(cls) -> boolrequires_auth(cls) -> boolget_methods(cls) -> list[str]requires_csrf(cls) -> boolasync process(self, input: Input, request: Request) -> Outputasync handle_request(self, request: Request) -> Responseuse_context(self, ctxid: str, create_if_not_exists: bool=...)requires_api_key(f)requires_loopback(f)requires_auth(f)csrf_protect(f)register_api_route(app: Flask, lock: ThreadLockType) -> Noneregister_watchdogs()CACHE_AREA.ApiHandler defines process(...).ApiHandler defines get_methods(...).ApiHandler defines requires_auth(...).ApiHandler defines requires_csrf(...).ApiHandler defines requires_api_key(...).ApiHandler defines requires_loopback(...).abc, flask, functools, helpers, helpers.errors, helpers.network, helpers.print_style, json, pathlib, threading, typing, werkzeug.wrappers.response.wraps, app.add_url_rule, watchdog.add_watchdog, cls.requires_auth, _use_context, login.get_credentials_hash, files.get_abs_path, handler_cls.requires_csrf, handler_cls.requires_api_key, handler_cls.requires_auth, handler_cls.requires_loopback, cache.add, PrintStyle.debug, cache.clear, get_settings, f, is_loopback_address, Response, redirect, files.is_in_dir.tests/test_api_chat_lifetime.pytests/test_browser_agent_regressions.pytests/test_download_toast_regressions.pytests/test_fasta2a_client.pytests/test_fastmcp_openapi_security.pytests/test_host_browser_connector.pytests/test_image_get_security.pytests/test_model_config_api_keys.pyNo child DOX files.