{"openapi":"3.1.0","info":{"title":"Notifications API","version":"0.1.0"},"paths":{"/api/docs":{"get":{"description":"Static route metadata and environment expectations.","responses":{"200":{"description":"OK"}},"security":[]}},"/api/docs/openapi":{"get":{"description":"Minimal OpenAPI JSON for the raw notification surface.","responses":{"200":{"description":"OK"}},"security":[]}},"/api/v1/health":{"get":{"description":"Deployment health check with database reachability.","responses":{"200":{"description":"OK"}},"security":[]}},"/api/v1/push/vapid-public-key":{"get":{"description":"Returns the public VAPID key used by browser push subscribe.","responses":{"200":{"description":"OK"}},"security":[{"bearerAuth":[]}]}},"/api/v1/preferences":{"patch":{"description":"Updates preferences for a normalized principal.","responses":{"200":{"description":"OK"}},"security":[{"bearerAuth":[]}]}},"/api/v1/push-subscriptions":{"delete":{"description":"Revokes a browser push subscription.","responses":{"200":{"description":"OK"}},"security":[{"bearerAuth":[]}]}},"/api/v1/dispatch":{"post":{"description":"Dispatches a push notification to up to 100 normalized recipients per call. Email remains on the legacy notification path.","responses":{"200":{"description":"OK"}},"security":[{"bearerAuth":[]}]}},"/api/v1/test-notification":{"post":{"description":"Sends a dev/staging test notification.","responses":{"200":{"description":"OK"}},"security":[{"bearerAuth":[]}]}}},"components":{"securitySchemes":{"bearerAuth":{"bearerFormat":"opaque","scheme":"bearer","type":"http"}}}}