Skip to content

List devices for an app​

GET
/v1/apps/{app_id}/devices

Lists devices for an app. Filters: ?q= (external_user_id/id substring, exact token, or key:value tags), ?status= (ok|off|invalid), ?platform= (ios|android|web), ?activity= (active|inactive), ?sort= (last_seen|first_seen), plus the legacy ?external_user_id=, ?search= and ?subscribed=. ?include=counts adds total, per-status counts and version meta on the first page only (no cursor).

Authorizations​

SessionAuth

Admin session cookie set by POST /v1/auth/login. Dashboard-only management.

Type
API Key (cookie: notti_session)
or
RESTKeyAuth

App REST key (rk_...). Server-to-server calls.

Type
HTTP (bearer)

Parameters​

Path Parameters

app_id*

App ID

Type
string
Required

Query Parameters

q

Search: external_user_id or id substring, exact push token, or key:value tag

Type
string
status

Filter by derived push status: ok, off or invalid

Type
string
platform

Filter by platform: ios, android or web

Type
string
activity

Activity filter: active (seen in 7 days) or inactive (30d+ or never)

Type
string
sort

Sort: last_seen or first_seen (default created_at)

Type
string
include

Comma-separated extras; counts adds total, per-status counts and meta (first page only)

Type
string
external_user_id

Filter by external user ID (exact match; ignored when search is present)

Type
string
search

Search by device ID (substring) or external user ID (exact) or tags (substring); takes precedence over external_user_id

Type
string
subscribed

Filter by subscription state: true or false

Type
string
limit

Page size (1-100, default 50)

Type
integer
cursor

Pagination cursor

Type
string

Responses​

{"items": [deviceResponse], "next_cursor": string|null, "total": int, "counts": {all, ok, off, invalid}} (total, counts and meta only with include=counts and no cursor)

application/json
JSON
{
}

Playground​

Authorization
Variables
Key
Value

Samples​


Register a device​

POST
/v1/apps/{app_id}/devices

Registers (upserts) a device token for the App. SDK-facing: authenticated by REST or Client key, never an admin session. On re-registration of an existing token, omitted external_user_id and tags keep their stored values; an explicit empty tags object clears tags.

Authorizations​

RESTKeyAuth

App REST key (rk_...). Server-to-server calls.

Type
HTTP (bearer)
or
ClientKeyAuth

App Client key (ck_...). Device-facing calls only.

Type
HTTP (bearer)

Parameters​

Path Parameters

app_id*

App ID

Type
string
Required

Request Body​

application/json
JSON
{
  
"external_user_id": "string",
  
"platform": "string",
  
"tags": {
  
  
"additionalProperties": null
  
},
  
"token": "string"
}

Responses​

Created

application/json
JSON
{
  
"app_id": "string",
  
"app_version": "string",
  
"country": "string",
  
"created_at": "string",
  
"device_model": "string",
  
"device_os": "string",
  
"email": "string",
  
"external_user_id": "string",
  
"first_seen_at": "string",
  
"first_session_at": "string",
  
"id": "string",
  
"language": "string",
  
"last_seen_at": "string",
  
"last_session_at": "string",
  
"last_unsubscribed_at": "string",
  
"permission_status": "string",
  
"phone": "string",
  
"platform": "string",
  
"push_status": "string",
  
"push_token_masked": "string",
  
"sdk_name": "string",
  
"sdk_version": "string",
  
"session_count": 0,
  
"session_time_seconds": 0,
  
"subscribed": true,
  
"tags": {
  
  
"additionalProperties": null
  
},
  
"timezone_id": "string",
  
"token": "string",
  
"updated_at": "string"
}

Playground​

Authorization
Variables
Key
Value
Body

Samples​


Summarize an app's devices​

GET
/v1/apps/{app_id}/devices/summary

Returns lifetime device counts for an App: total, per platform, and per subscription state (soft-deleted devices excluded).

Authorizations​

SessionAuth

Admin session cookie set by POST /v1/auth/login. Dashboard-only management.

Type
API Key (cookie: notti_session)
or
RESTKeyAuth

App REST key (rk_...). Server-to-server calls.

Type
HTTP (bearer)

Parameters​

Path Parameters

app_id*

App ID

Type
string
Required

Responses​

OK

application/json
JSON
{
  
"android": 0,
  
"ios": 0,
  
"subscribed": 0,
  
"total": 0,
  
"unsubscribed": 0
}

Playground​

Authorization
Variables
Key
Value

Samples​


List distinct tag keys for an app's devices​

GET
/v1/apps/{app_id}/devices/tags

Returns the distinct tag keys in use across an App's devices, each with up to 10 distinct sample values, capped at 200 keys.

Authorizations​

SessionAuth

Admin session cookie set by POST /v1/auth/login. Dashboard-only management.

Type
API Key (cookie: notti_session)
or
RESTKeyAuth

App REST key (rk_...). Server-to-server calls.

Type
HTTP (bearer)

Parameters​

Path Parameters

app_id*

App ID

Type
string
Required

Responses​

{"keys": [tagKeyResponse]}

application/json
JSON
{
}

Playground​

Authorization
Variables
Key
Value

Samples​


Get a device​

GET
/v1/apps/{app_id}/devices/{id}

Fetches a single device by ID, scoped to the App, with matched segments, 30-day sends, push status, token error and version metadata.

Authorizations​

SessionAuth

Admin session cookie set by POST /v1/auth/login. Dashboard-only management.

Type
API Key (cookie: notti_session)
or
RESTKeyAuth

App REST key (rk_...). Server-to-server calls.

Type
HTTP (bearer)

Parameters​

Path Parameters

app_id*

App ID

Type
string
Required
id*

Device ID

Type
string
Required

Responses​

OK

application/json
JSON
{
  
"app_id": "string",
  
"app_version": "string",
  
"country": "string",
  
"created_at": "string",
  
"device_model": "string",
  
"device_os": "string",
  
"email": "string",
  
"external_user_id": "string",
  
"first_seen_at": "string",
  
"first_session_at": "string",
  
"id": "string",
  
"language": "string",
  
"last_seen_at": "string",
  
"last_session_at": "string",
  
"last_unsubscribed_at": "string",
  
"latest_app_version": "string",
  
"min_rich_version": "string",
  
"permission_status": "string",
  
"phone": "string",
  
"platform": "string",
  
"push_status": "string",
  
"push_token_masked": "string",
  
"sdk_name": "string",
  
"sdk_version": "string",
  
"segments": [
  
  
{
  
  
  
"id": "string",
  
  
  
"name": "string"
  
  
}
  
],
  
"sends_30d": 0,
  
"session_count": 0,
  
"session_time_seconds": 0,
  
"subscribed": true,
  
"tags": {
  
  
"additionalProperties": null
  
},
  
"timezone_id": "string",
  
"token": "string",
  
"token_error": "string",
  
"updated_at": "string"
}

Playground​

Authorization
Variables
Key
Value

Samples​


Delete a device​

DELETE
/v1/apps/{app_id}/devices/{id}

Soft-deletes a device. Session-only (no REST/Client key path). Its delivery history is kept; the device disappears from lists and segments.

Authorizations​

SessionAuth

Admin session cookie set by POST /v1/auth/login. Dashboard-only management.

Type
API Key (cookie: notti_session)

Parameters​

Path Parameters

app_id*

App ID

Type
string
Required
id*

Device ID

Type
string
Required

Responses​

No Content

Playground​

Authorization
Variables
Key
Value

Samples​


Update a device​

PATCH
/v1/apps/{app_id}/devices/{id}

Updates a device's subscription flag, tags, external user ID, app version, session telemetry, country, or profile fields (device_os, device_model, sdk_version, sdk_name, permission_status, last_unsubscribed_at, email, phone, timezone_id, language). Absent fields are unchanged. external_user_id, country, email and phone accept null to clear the stored value; an empty external_user_id ("") is unchanged. When authenticated by a Client key, the request must also carry the device's own token as proof of ownership.

Authorizations​

RESTKeyAuth

App REST key (rk_...). Server-to-server calls.

Type
HTTP (bearer)
or
ClientKeyAuth

App Client key (ck_...). Device-facing calls only.

Type
HTTP (bearer)

Parameters​

Path Parameters

app_id*

App ID

Type
string
Required
id*

Device ID

Type
string
Required

Request Body​

application/json
JSON
{
  
"app_version": "string",
  
"country": "string",
  
"device_model": "string",
  
"device_os": "string",
  
"email": "string",
  
"external_user_id": "string",
  
"first_session_at": "string",
  
"language": "string",
  
"last_session_at": "string",
  
"last_unsubscribed_at": "string",
  
"permission_status": "string",
  
"phone": "string",
  
"sdk_name": "string",
  
"sdk_version": "string",
  
"session_count": 0,
  
"session_time_seconds": 0,
  
"subscribed": true,
  
"tags": {
  
  
"additionalProperties": null
  
},
  
"timezone_id": "string",
  
"token": "string"
}

Responses​

OK

application/json
JSON
{
  
"app_id": "string",
  
"app_version": "string",
  
"country": "string",
  
"created_at": "string",
  
"device_model": "string",
  
"device_os": "string",
  
"email": "string",
  
"external_user_id": "string",
  
"first_seen_at": "string",
  
"first_session_at": "string",
  
"id": "string",
  
"language": "string",
  
"last_seen_at": "string",
  
"last_session_at": "string",
  
"last_unsubscribed_at": "string",
  
"permission_status": "string",
  
"phone": "string",
  
"platform": "string",
  
"push_status": "string",
  
"push_token_masked": "string",
  
"sdk_name": "string",
  
"sdk_version": "string",
  
"session_count": 0,
  
"session_time_seconds": 0,
  
"subscribed": true,
  
"tags": {
  
  
"additionalProperties": null
  
},
  
"timezone_id": "string",
  
"token": "string",
  
"updated_at": "string"
}

Playground​

Authorization
Variables
Key
Value
Body

Samples​


List a device's recent deliveries​

GET
/v1/apps/{app_id}/devices/{id}/deliveries

Returns the device's deliveries from the last 30 days, newest first, scoped to the App. status is delivered|opened|failed|pending; reason is the classified provider error code of a failed delivery (null otherwise); is_test marks a dashboard test send; template_name is null for an ad-hoc notification.

Authorizations​

SessionAuth

Admin session cookie set by POST /v1/auth/login. Dashboard-only management.

Type
API Key (cookie: notti_session)
or
RESTKeyAuth

App REST key (rk_...). Server-to-server calls.

Type
HTTP (bearer)

Parameters​

Path Parameters

app_id*

App ID

Type
string
Required
id*

Device ID

Type
string
Required

Query Parameters

limit

Page size (1-20, default 6)

Type
integer

Responses​

OK

application/json
JSON
{
  
"items": [
  
  
{
  
  
  
"id": "string",
  
  
  
"is_test": true,
  
  
  
"reason": "string",
  
  
  
"sent_at": "string",
  
  
  
"status": "string",
  
  
  
"template_name": "string",
  
  
  
"title": "string"
  
  
}
  
]
}

Playground​

Authorization
Variables
Key
Value

Samples​


Send a test push to a device​

POST
/v1/apps/{app_id}/devices/{id}/test

Session-only. Creates an is_test notification and delivery for the device and enqueues it through the normal queue. 422 device_not_reachable when the device cannot receive push; 429 beyond 10/min per user and app.

Authorizations​

SessionAuth

Admin session cookie set by POST /v1/auth/login. Dashboard-only management.

Type
API Key (cookie: notti_session)

Parameters​

Path Parameters

app_id*

App ID

Type
string
Required
id*

Device ID

Type
string
Required

Request Body​

application/json
JSON
{
  
"body": "string",
  
"title": "string"
}

Responses​

{"delivery_id": string, "status": "pending"}

application/json
JSON
{
}

Playground​

Authorization
Variables
Key
Value
Body

Samples​


Powered by VitePress OpenAPI