Documentation Index
Fetch the complete documentation index at: https://setup.despia.com/llms.txt
Use this file to discover all available pages before exploring further.
Installation
- Bundle
- CDN
Methods
Methods
Register for push (custom setups only)
Despia requests push permission and registers the device with OneSignal automatically at app launch. You do not need to call this. It is only available if you have disabled auto-registration in the Despia dashboard and want to trigger the permission prompt at a specific point in your own flow.Link user ID
Associates the device with your user. Call this on every authenticated app load, immediately after you confirm the user is logged in. This is how OneSignal knows which device to deliver a notification to when you send it.| Parameter | Required | Description |
|---|---|---|
user_id | Yes | Your user’s ID from your own database. This becomes the external_id in OneSignal. |
include_external_user_ids when sending notifications from your backend.
Check push permission status
Check whether the user has push notifications enabled on their device. Use this to show an in-app prompt directing them to their settings if they have not granted permission.| Return key | Type | Description |
|---|---|---|
nativePushEnabled | boolean | true if the user has granted push permission, false if denied or not yet requested |
settingsapp:// opens the device settings page for your app where the user can enable notifications directly.
Full client-side setup
Backend: send a notification
Send notifications from your backend using OneSignal’s REST API. Useinclude_external_user_ids to target specific users by the same ID you passed to setonesignalplayerid://.
Send to multiple users
Send to all users
Notification payload options
| Field | Type | Description |
|---|---|---|
app_id | string | Your OneSignal App ID |
include_external_user_ids | string[] | Target specific users by your user ID |
included_segments | string[] | Target a segment, e.g. ["All"], ["Active Users"] |
headings | object | Title per language, e.g. { en: "Title" } |
contents | object | Body per language, e.g. { en: "Message" } |
data | object | Custom key-value data delivered with the notification. Supports url, path, and metadata (see routing section below). |
send_after | string | Schedule delivery, e.g. "2026-01-01T09:00:00Z" |
delayed_option | string | "timezone" to deliver at a specific local time |
delivery_time_of_day | string | Time for timezone delivery, e.g. "9:00AM" |
ios_critical_alert | number | Set to 1 to send a critical alert on iOS. Requires the Critical Alerts entitlement and must be enabled in Despia before use. |
Deep linking and routing from a notification
Thedata object supports three fields for routing and state delivery. All are optional and can be combined freely.
| Key | Type | Behavior |
|---|---|---|
url | string | Legacy. Full URL or relative path. Triggers a full WebView navigation/reload. Use only when a reload is actually needed. |
path | string | A route like /account/orders?status=open#123. Despia updates the URL via pushState and fires popstate. No reload, no extra code needed in your web app. |
metadata | any JSON | Arbitrary state object delivered to window.onNotificationEvent. Use it to restore app state on open. |
Sending a path from your backend
popstate event and navigate automatically, no additional code required on the web side.
window.onNotificationEvent (optional)
If your router does not react to a synthetic popstate, or you need to act on metadata, define window.onNotificationEvent at the top of your entry bundle. The host app calls it on every notification tap after applying the URL change.
If you set
metadata via the OneSignal dashboard Additional Data fields, the value arrives as a string and must be JSON.parsed. If you send metadata as a real JSON object via the REST API data field, the handler receives an object directly. path and url are always strings.Timing
| App state when notification is tapped | When the URL updates and onNotificationEvent fires |
|---|---|
| Foreground (web app already loaded) | Immediately. path changes with no reload. |
| Background (resumed) | When the WebView is presented, after the page is ready. |
| Killed / cold start | Native buffers the payload and applies it once the page finishes loading. |
data.url push (any state) | After the forced reload completes. |
Critical alerts
Critical alerts bypass Do Not Disturb and silent mode on the user’s device.iOS
iOS requires the Critical Alerts entitlement from Apple. Request it at developer.apple.com/contact/request/notifications-critical-alerts-entitlement. Apple reviews requests manually and approval can take several weeks. When submitting the request, you need to enable the entitlement on two bundle IDs, your core app bundle ID and your OneSignal Service Extension bundle ID. For example, if your app bundle ID iscom.despia.myapp, add both:
com.despia.myappcom.despia.myapp.OneSignalNotificationServiceExtension
ios_critical_alert to 1 in your payload.
Android
No dashboard configuration or rebuild is required. Setpriority to 10 and android_channel_id to a high-importance channel in your OneSignal payload.
To get your channel ID, go to OneSignal > Settings > Messaging > Android Categories and create a new category with importance set to Urgent. OneSignal will generate a channel ID for that category, copy it and use it as android_channel_id in your payload.
Both platforms
To send a single critical alert that works on both Android and iOS, combine the fields in one payload.Segmentation
Beyondinclude_external_user_ids, OneSignal supports segments based on user behaviour. Set tags on users to create custom segments.
Resources
NPM Package
despia-native
OneSignal Dashboard
Configure your push notification app
Create Notification API
Full OneSignal REST API reference