Add a destination
- Open Gateway → Settings → Notifications.
- Select Add destination.
- Enter a name and choose one or more channels.
- Add the destination details and optional mentions.
- Select Send test for each configured channel.
- Create the destinations after every test succeeds.
phaseo notifications destinations create, check it with phaseo notifications destinations test <id>, then choose which alerts it receives with phaseo notifications routes set <event-kind> --destination-ids <id>.
Custom webhooks get a signing secret when you create them. Copy it from the dialog that opens; it is shown only once.
Phaseo supports:
- email addresses and distribution lists
- Discord channels through a bot token
- Discord webhooks
- Slack incoming webhooks
- Microsoft Teams workflow URLs
- custom HTTPS webhooks
Enable product alerts
The notifications page lists the alert types available to your workspace. Enable Model Deprecation Alerts to receive notice before a model used by the workspace is retired. Model replacement notices are sent when retired model routing is on and a replacement model answers the workspace’s requests for a model no provider serves any more. One notice is sent per model and replacement, the first time a replacement answers successfully. The workspace owner is always emailed; choose destinations to send the notice to your team as well. Alerts are delivered to the configured destinations in addition to any built-in recipient behavior shown in the dashboard.Spend reports
Workspace owners get a spend report email every Monday at 09:00 in the workspace billing time zone, covering the previous Monday-to-Sunday week. Change it under Spend alerts → Workspace spend settings on the notifications page: daily (09:00, for the day before), weekly, monthly (on the 1st, for the month before) or off, and whether admins get it too. Periods without spend are skipped. Each report shows spend and the change from the period before, the top keys, models, members and departments, this month’s forecast, the balance runway, and the period’s spend alerts and blocks. Anyone who gets it can unsubscribe from the link in the email; that stops only their copy of that workspace’s report. Destinations routed to Spend Reports get one summary per report. The same settings arespend.report_cadence and spend.report_include_admins in the notification settings API.
Spend report emails are being rolled out. Until they are switched on, your choice is saved but no report is sent.
Mentions
Optional mention fields let an alert notify specific recipients:- Discord accepts user IDs and role IDs.
- Slack accepts user IDs and user-group IDs.
- Microsoft Teams accepts Microsoft 365 email addresses or Entra object IDs.
Test and remove destinations
Use Send test beside an existing destination after rotating credentials or changing channel configuration. Remove destinations that are no longer monitored so alerts do not appear delivered to an abandoned channel. Custom webhooks must use HTTPS and should validate the request before processing it. Return a successful response promptly and move slower work to a background job.Verify webhook signatures
Phaseo signs every custom webhook delivery, including tests sent from a saved destination, with the same scheme as video and batch webhooks. Each request carries these headers:x-phaseo-signature is the hexadecimal HMAC-SHA256 of the x-phaseo-timestamp value, a literal period (.), and the unmodified request body, keyed with the destination’s signing secret (whsec_…). x-phaseo-timestamp is in Unix seconds.
To verify a delivery:
- Read the raw request body before parsing it as JSON.
- Recompute the signature and compare it in constant time.
- Reject timestamps more than five minutes from your clock.
- Deduplicate on
x-phaseo-event-id. Failed deliveries are retried, and each attempt is signed again with a new timestamp.
Generate or rotate a secret
The secret is shown once, when the destination is created. To replace it, select Rotate secret beside the destination in Settings → Notifications, or callPOST /v1/notifications/destinations/{id}/rotate-secret. The next delivery is signed with the new secret and the old one stops working, so update your receiver straight away.
Custom webhooks created before signing was available have no secret and are still delivered unsigned. They show Unsigned in Settings. Select Generate secret, add the secret to your receiver, then send a test to check verification. Tests sent from the Add destination sheet, before the destination is saved, are unsigned because no secret exists yet.
Email, Slack, Discord and Microsoft Teams destinations are not signed: those services authenticate the webhook URL or bot token themselves.