INVALID_REQUEST400
Malformed JSON, missing field or failed validation. error.details.field says which.
INVALID_API_KEY401
No bearer token, or a key that is unknown or was rotated.
SITE_NOT_FOUND404
The public identifier is unknown, or the Origin does not match the registration.
SITE_EXPIRED403
The inactivity window elapsed. Reactivate to keep the same key.
SITE_SUSPENDED403
The key was revoked and the account must be re-enabled.
SITE_BLOCKED403
Repeated registrations for this website. Operator-only reversal.
INVALID_SUBSCRIPTION400
Malformed endpoint, p256dh or auth. Re-subscribe from the browser.
PUSH_ENDPOINT_NOT_ALLOWED400
The endpoint host is not an accepted push service for this deployment.
NOTIFICATION_PAYLOAD_TOO_LARGE413
The body or the encrypted payload is over the ceiling. Shorten body, image or data.
RATE_LIMIT_EXCEEDED429
Window budget spent. Honour retry-after.
PUSH_DELIVERY_FAILED502
No push service could be reached at all for this publish.
INTERNAL_SERVER_ERROR500
Unexpected failure. Details are logged, never returned — quote x-request-id.
NOT_FOUND404
Unknown route or documentation page.
METHOD_NOT_ALLOWED405
Known path, wrong verb — the allow header lists the valid ones.
NOTIFICATION_NOT_FOUND404
Unknown id, or one that belongs to a different registration.
DUPLICATE_SITE409
This website already has an account. details.attempts counts attempts so far.
SITE_LIMIT_REACHED409
The subscription cap for this registration is full. Prune dead endpoints.
REGISTRATION_DISABLED403
New registrations are switched off on this deployment; an operator must enable them.
SERVICE_UNAVAILABLE503
The instance is missing secrets or a valid VAPID configuration.