{"openapi": "3.1.0", "info": {"title": "BlackBull Demo", "version": "0.54.0", "description": "Live demo of the BlackBull ASGI framework."}, "paths": {"/favicon.ico": {"get": {"summary": "Redirect legacy /favicon.ico requests to the SVG favicon.", "description": "Browsers that don't recognise ``<link rel=\"icon\">`` with SVG\nfall back to requesting ``/favicon.ico`` from the origin root.", "responses": {"200": {"description": "OK"}}}}, "/robots.txt": {"get": {"summary": "Serve robots.txt.", "description": "Disallows static assets and API endpoints from crawling.\nNo ``Sitemap:`` directive \u2014 the demo site has no sitemap yet.", "responses": {"200": {"description": "OK"}}}}, "/": {"get": {"summary": "HTML dashboard \u2014 human-facing landing page.", "responses": {"200": {"description": "OK"}}}}, "/health": {"get": {"summary": "Machine-readable JSON health check.", "responses": {"200": {"description": "OK"}}}}, "/stats.json": {"get": {"summary": "JSON export of in-memory statistics.", "responses": {"200": {"description": "OK"}}}}, "/api/echo/{name}": {"get": {"summary": "Path-parameter routing demo.", "parameters": [{"name": "name", "in": "path", "required": true, "schema": {"type": "string"}}], "responses": {"200": {"description": "OK"}}}}, "/api/square/{n}": {"get": {"summary": "Type-coercion demo \u2014 ``int`` converter on ``{n:int}``.", "parameters": [{"name": "n", "in": "path", "required": true, "schema": {"type": "integer"}}], "responses": {"200": {"description": "OK"}}}}, "/api/info": {"get": {"summary": "Auto ``dict`` \u2192 ``JSONResponse`` demo.", "responses": {"200": {"description": "OK"}}}}, "/api/headers": {"get": {"summary": "httpbin-style request-header echo.", "responses": {"200": {"description": "OK"}}}}, "/api/methods": {"get": {"summary": "Method-based routing demo \u2014 one path, four HTTP methods.", "responses": {"200": {"description": "OK"}}}, "post": {"summary": "Method-based routing demo \u2014 one path, four HTTP methods.", "requestBody": {"content": {"application/json": {"schema": {"type": "object"}}}}, "responses": {"200": {"description": "OK"}}}, "put": {"summary": "Method-based routing demo \u2014 one path, four HTTP methods.", "requestBody": {"content": {"application/json": {"schema": {"type": "object"}}}}, "responses": {"200": {"description": "OK"}}}, "delete": {"summary": "Method-based routing demo \u2014 one path, four HTTP methods.", "responses": {"200": {"description": "OK"}}}}, "/pot": {"post": {"requestBody": {"content": {"application/json": {"schema": {"type": "object"}}}}, "responses": {"200": {"description": "OK"}}}, "get": {"responses": {"200": {"description": "OK"}}}}, "/pot/when": {"get": {"responses": {"200": {"description": "OK"}}}}, "/teapot": {"post": {"requestBody": {"content": {"application/json": {"schema": {"type": "object"}}}}, "responses": {"200": {"description": "OK"}}}, "get": {"responses": {"200": {"description": "OK"}}}}, "/teapot/when": {"get": {"responses": {"200": {"description": "OK"}}}}}}