Skip to main content
OnTime notifies people in-app only — no email, no chat. This guide builds the bridge to wherever your team actually looks.

What you can and cannot do

Webhooks fire on decisions, not on requests. There is no leave.requested event. You will be told when a leave request is approved or rejected; you will not be told when one arrives needing a decision.That is the opposite of what a “pending approvals” bot needs. So this splits into two mechanisms:

Part 1 — Announce decisions

Register a webhook subscribing to the decision events, then post each one to chat.
Resolving names costs a lookup. The payload gives you recipientId, not a name. Cache the directory from GET /api/public/v1/employees and refresh it daily rather than fetching per event.
Full signature-verification detail is in Webhooks.

Part 2 — Surface pending work

For “what is waiting on me”, use the MCP server. An MCP key is bound to a specific employee and acts with exactly that person’s permissions and scope — so a manager’s bot sees their direct reports’ pending requests, and nobody else’s. Relevant tools: And to act: Setup and the full catalog are in the AI & MCP tab.
Scope applies, and so does the same-actor rule. A bot acting as an employee cannot approve that employee’s own requests, and cannot see anything outside their scope. This is a feature — it means a compromised bot key is no more powerful than the person it acts as.

A reasonable architecture

Push for decisions — they are time-sensitive and low-volume. Pull for pending work — a morning digest beats a notification per request.

Operating it

1

Monitor your own endpoint

The webhook flips to Failing on the first failure, but the OnTime alert only fires after all eight retries — roughly 22 hours later.
2

Deduplicate durably

The in-memory Set above is illustrative. Restart it and you re-post events.
3

Check notification preferences

Webhook delivery is gated by the organization’s notification preferences. If a category is switched off in Settings → Notifications, that webhook never fires — check there before the delivery log.
4

Replay from the delivery log

Failed deliveries are not lost. Fix the endpoint, then replay.