Alerts & digests
Webhooks deliver events to your servers. Alerts deliver the same events to you: an email or a phone push the moment a sale lands, plus an optional rolled-up revenue digest.
Turn them on
Everything lives in Dashboard → Settings → Notifications. Pick your channels, then choose which events reach you on each one. Changes save as you make them.
- Email: defaults to your login address; point it at an alias or a shared inbox if you'd rather.
- Pushover: paste the user key from your Pushover dashboard. You do notneed to register a Pushover application: leave the application-token field blank and sends go through EntitleHub's. Supply your own token if you'd rather the notifications carry your app's name and icon.
Each channel has a Send test button that pushes a realistic sample sale through the real delivery path, so you can confirm the plumbing without waiting for a customer.
Which events
The event catalog is identical to the webhook one: initial_purchase, renewal, trial_started, trial_converted, cancellation, expiration, billing_issue, refund, override, with a per-channel switch for each.
New projects start with the money events on (new sale, trial converted, refund) and the routine lifecycle events off. A busy app renews constantly; you probably do not want a push for every one of those, but you almost certainly want the first sale of the day.
Alerts fire only for "environment": "production". TestFlight purchases, Google Play license-tester purchases, and Stripe test-mode subscriptions are all excluded: an alert that goes off during your own internal testing is worse than no alert, because it teaches you to ignore the real one.
Webhooks behave differently on purpose: they receive sandbox events too, tagged with environment, so your test builds still work end to end. See Webhooks.
Revenue digest
A daily or weekly summary, on top of (not instead of) per-event alerts. Pick the frequency and the hour it arrives, in UTC. It reports net revenue, gross, refunds, transaction count, a per-store breakdown, new paying subscribers, MRR, and active subscribers, all excluding sandbox.
Quiet periods are skipped rather than mailed as a row of zeros, so a digest arriving means something actually happened. Send one now gives you the current period immediately without disturbing the schedule.
Revenue in the payload
Events now carry the money the engine booked, so your own integrations can report it too:
{
"id": "evt_…",
"type": "initial_purchase",
"app_user_id": "user_123",
"store": "play",
"product": "app_pro_monthly",
"entitlement": "pro",
"active_entitlements": ["pro"],
"environment": "production",
"revenue_micros": 9990000, // 9.99. Negative on a refund, absent when nothing was booked
"currency": "USD",
"created_at": "2026-08-26T00:00:00Z"
}revenue_micros is what EntitleHub actually recorded, not the catalog price. It is absent or zero for anything that moved no money: a sandbox purchase, a Google Play promo-code redemption or rewarded purchase, a manual grant, a free trial starting, or a duplicate store notification for a renewal cycle already counted.
