{"openapi":"3.1.0","info":{"title":"Notifications API","version":"0.1.0"},"paths":{"/api/v1/health":{"get":{"description":"Deployment health check with database reachability.","responses":{"200":{"description":"OK"},"503":{"description":"HTTP 503"}},"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":{"get":{"description":"Lists effective preferences for a normalized principal.","responses":{"200":{"description":"OK"}},"security":[{"bearerAuth":[]}]},"patch":{"description":"Updates preferences for a normalized principal.","responses":{"200":{"description":"OK"}},"security":[{"bearerAuth":[]}]}},"/api/v1/push-subscriptions":{"post":{"description":"Saves or refreshes a browser push subscription.","responses":{"201":{"description":"HTTP 201"}},"security":[{"bearerAuth":[]}]},"delete":{"description":"Revokes a browser push subscription.","responses":{"200":{"description":"OK"}},"security":[{"bearerAuth":[]}]}},"/api/v1/dispatch":{"post":{"description":"Queues a push notification broadcast for explicit normalized recipients. Email remains on the legacy notification path.","responses":{"202":{"description":"HTTP 202"}},"security":[{"bearerAuth":[]}]}},"/api/v1/test-notification":{"post":{"description":"Sends a dev/staging test notification.","responses":{"202":{"description":"HTTP 202"}},"security":[{"bearerAuth":[]}]}}},"components":{"securitySchemes":{"bearerAuth":{"bearerFormat":"opaque","scheme":"bearer","type":"http"}}}}