Notifications

Email and browser push for the events worth interrupting someone about, and how to choose which.

Notifications announce one event: a tool call is waiting for approval. They do not replace the approvals queue, and delivery failure never changes the tool call's decision or expiry.

Omniio settings showing browser, email and webhook controls for approval notificationsOmniio settings showing browser, email and webhook controls for approval notifications
Choose channels independently, then send a real test before an agent needs one.

Three channels#

Browser push
Per browser and per device. It can arrive while Omniio is closed; tapping opens the exact request, or the queue when several calls are waiting.
Email
Sent to the account address with the tool, redacted and capped arguments, and the approve-or-deny link. It is on by default when a mail relay is configured.
Webhook
A Slack or Discord incoming webhook, or your own endpoint. The JSON carries compatible `text` and `content` fields plus structured approval data.

Push permission belongs to the browser, not to the Omniio account. Turning it on for a laptop does not turn it on for a phone. On iPhone and iPad, add Omniio to the Home Screen before Safari exposes Web Push; a permission denied in the browser can only be restored from that browser's site settings.

Webhook payload#

Approval webhooks use the event name tool_approval.requested and include the request ID, server, tool, qualified name, shortened arguments and decision URL.

json
{
"event": "tool_approval.requested",
"approval": {
"id": "…",
"server": "GitHub",
"tool": "create_issue",
"qualifiedName": "github__create_issue",
"arguments": "{\n \"title\": \"…\"\n}",
"url": "https://omniio.dev/app/tools/approvals/…"
}
}

The destination must be a public HTTPS URL. Omniio refuses credentials in the URL, localhost, .local and .internal names, address literals and recognised private, loopback, carrier or link-local IPv4 ranges. Requests do not follow redirects and stop waiting after eight seconds.

Rate and privacy#

The first new held call may announce on every enabled channel. Further calls opened during the next 60 seconds do not stack more email or webhook messages. Push updates the existing notification in place with the number waiting, using one stable notification tag rather than filling the device shade.

A retry of the same pending request never announces it again. Lock-screen push omits arguments entirely; email and webhook receive only the redacted, capped display form described on Approvals.

All notification sending is bounded and best-effort. A broken mail relay, dead push subscription or webhook timeout is not allowed to hold or fail the MCP request that caused it.

Test the route#

Save the settings, then choose Send a test. Omniio sends through every enabled channel and reports email, webhook and push separately, including how many browsers accepted the push. The test links to settings rather than manufacturing a fake approval, and it uses a different push tag so it cannot replace a real waiting-call notice.

Next: Teams and roles.

On this page