Devices
Manage push-notification device registrations for mobile and desktop apps. Devices are always scoped to the calling user.
GET /api/devices
List all devices for the authenticated user.
Authentication: Required
Response:
A HAL collection under _embedded["inf:device"], scoped to the caller via read access.
List my registered devicesGET /api/devices
Scoped to the calling user via read access; never returns another user’s devices.
Response · 200
{
"_links": {
"self": {
"href": "https://informer.example.com/api/devices"
}
},
"items": [
{
"tenant": "acme",
"id": "00000000-0000-4000-8000-000000000001",
"username": "admin",
"deviceId": "ios-7f3a9c2e",
"deviceToken": "fcm-EXAMPLE-token-abc123",
"platform": "ios",
"lastActiveAt": "2026-01-15T16:20:00.000Z",
"createdAt": "2026-01-15T16:20:00.000Z",
"updatedAt": "2026-01-15T16:20:00.000Z",
"user": {
"permissions": {
"changeDomain": false,
"changeProfile": false,
"changePassword": false,
"delete": false,
"edit": false,
"reassign": false,
"superuser": false,
"enable": false,
"changeTheme": false,
"lock": false,
"setGlobalPermissions": false,
"manageLogin": false
},
"domain": "local",
"username": "admin",
"displayName": "acme Administrator",
"familyName": "Administrator",
"givenName": "acme",
"middleName": null,
"email": null,
"data": null,
"superuser": true,
"timezone": "America/New_York",
"enabled": true,
"source": null,
"sourceId": null,
"lastViewedFeed": null,
"tenant": "acme",
"globalPermissions": {
"ai": false,
"jobCreation": true,
"viewAllTeams": true,
"viewAllUsers": true,
"painlessScriptCreation": true
},
"userFields": {},
"locked": false,
"lockedAt": null,
"loginAttempts": 0,
"passwordSetAt": "2026-01-15T16:20:00.000Z",
"passwordExpiresAt": "2026-01-15T16:20:00.000Z",
"forgotPasswordRequestTime": null,
"mfa": null,
"aiMessage": null,
"aiConsent": false,
"hasSharedDatasources": false,
"createdAt": "2026-01-15T16:20:00.000Z",
"updatedAt": "2026-01-15T16:20:00.000Z"
}
}
],
"start": 0,
"count": 1,
"total": 1
}
GET /api/devices/{deviceId}
Get a single device.
Path Parameters:
| Parameter | Type | Description |
|---|---|---|
deviceId | string | Device ID |
Get a single deviceGET /api/devices/ios-7f3a9c2e
Response · 200
{
"_links": {
"self": {
"href": "https://informer.example.com/api/devices/ios-7f3a9c2e"
}
},
"tenant": "acme",
"id": "00000000-0000-4000-8000-000000000001",
"username": "admin",
"deviceId": "ios-7f3a9c2e",
"deviceToken": "fcm-EXAMPLE-token-abc123",
"platform": "ios",
"lastActiveAt": "2026-01-15T16:20:00.000Z",
"createdAt": "2026-01-15T16:20:00.000Z",
"updatedAt": "2026-01-15T16:20:00.000Z"
}
PUT /api/devices/{deviceId}
Register (or update) a device for the calling user. Re-registering the same deviceId updates its token and platform.
Request Body:
| Field | Type | Required | Description |
|---|---|---|---|
deviceToken | string | Yes | The push token issued by APNs/FCM |
platform | string | Yes | ios or android |
lastActiveAt | date | No | Last activity timestamp |
Register (or update) a devicePUT /api/devices/ios-7f3a9c2e
Upserts the push registration for the calling user keyed by deviceId. Re-registering the same deviceId updates the token and platform.
Request body
{
"deviceToken": "fcm-EXAMPLE-token-abc123",
"platform": "ios"
}
Response · 200
{
"_links": {
"self": {
"href": "https://informer.example.com/api/devices/ios-7f3a9c2e"
}
},
"tenant": "acme",
"id": "00000000-0000-4000-8000-000000000001",
"username": "admin",
"deviceId": "ios-7f3a9c2e",
"deviceToken": "fcm-EXAMPLE-token-abc123",
"platform": "ios",
"updatedAt": "2026-01-15T16:20:00.000Z",
"createdAt": "2026-01-15T16:20:00.000Z",
"lastActiveAt": "2026-01-15T16:20:00.000Z"
}
POST /api/devices/{deviceId}
Send a push notification to a registered device. Responds 204.
Request Body:
| Field | Type | Required | Description |
|---|---|---|---|
message.notification.title | string | Yes | Notification title |
message.notification.body | string | Yes | Notification body |
message.topic | string | No | APNs topic |
message.data | object | No | Additional data payload |
{
"message": {
"notification": { "title": "Report ready", "body": "Your export finished." }
}
}
DELETE /api/devices/{deviceId}
Unregister a device.
Response:
Responds 204 with no body.
Remove a deviceDELETE /api/devices/ios-7f3a9c2e
Responds 204 with no body. Used on sign-out to stop push delivery to that device.
Response · 204 · no body
Use Case:
Remove device registration when the app is uninstalled or the user logs out.