{"service":"NervIQ","base_url":"https://api.nerviq.se","message":"NervIQ API is running","purpose":"Customer-scoped building and energy data API. Per-customer surfaces live under /public/{slug}/ after login.","authentication":{"public_customer":{"login":"POST /public-auth/{slug}/login","body":{"email":"named user in public_api_users (required for named accounts)","password":"string"},"token":"Authorization: Bearer <access_token>","token_sub":"public:{slug}","notes":["Omitting email uses legacy shared dashboard password for that slug.","Token is slug-scoped: wrong slug → 403.","Viewer tokens cannot call mutation endpoints (403)."]},"admin_openapi":{"path":"GET /admin/openapi.json","auth":"superadmin session — not for customers or public agents"}},"open":[{"path":"/","title":"This discovery document","auth":"none","purpose":"HTML for browsers; JSON for Accept: application/json"},{"path":"/llms.txt","title":"LLM-oriented route map (plain text)","auth":"none","purpose":"Canonical agent entry — where to find what without OpenAPI"},{"path":"/.well-known/llms.txt","title":"Same map (well-known)","auth":"none","purpose":"Alias of /llms.txt"},{"path":"/health","title":"Liveness","auth":"none","purpose":"Process up; 503 if degraded"},{"path":"/health/smoke","title":"Post-deploy smoke","auth":"none","purpose":"Fail-closed readiness after restart"}],"token_gated_public":[{"path":"/public/{slug}/docs","title":"Interactive HTML API docs + login","auth":"none","purpose":"Human catalog browser for one kund (slug)"},{"path":"/public/{slug}/docs.json","title":"Machine catalog + changelog","auth":"bearer-public-slug","purpose":"JSON for agents after login"},{"path":"/public/{slug}/llms.txt","title":"Slug-scoped LLM catalog","auth":"bearer-public-slug","purpose":"Endpoint list for that kund/slug only"},{"path":"/public/{slug}/catalog","title":"Catalog (slug-scoped)","auth":"bearer-public-slug","purpose":"Same catalog family as docs.json"}],"examples":{"slug":"{slug}","login_curl":"curl -sS -X POST https://api.nerviq.se/public-auth/{slug}/login -H 'Content-Type: application/json' --data '{\"email\":\"…\",\"password\":\"…\"}'","docs_html":"https://api.nerviq.se/public/{slug}/docs","docs_json":"curl -sS https://api.nerviq.se/public/{slug}/docs.json -H 'Authorization: Bearer <token>'"},"not_exposed":["GET /openapi.json — disabled in production (use token-gated catalog or admin openapi)","GET /docs /redoc — Swagger UI off in production","VPN admin API — https://vpn.nerviq.se (separate service; X-API-Key)"],"principals_ssot":"Repo docs/api-principals/REGISTRY.yaml names human and agent-test principals; secrets never in git."}