ZeepNotti Docs

Overview

Per-App analytics for the dashboard Overview: KPIs, funnel, failures, deliveries, devices, templates, heatmap, and MAU usage, bucketed in the App's timezone.

GET
/v1/apps/{app_id}/overview/deliveries

Delivered and failed counts per local day (App timezone, YYYY-MM-DD), zero-filled, plus the range totals.

Authorization

SessionAuth

Path Parameters

app_id*string

App ID

Query Parameters

range?string

7d, 14d, 30d, 90d, or custom (default 14d)

from?string

Custom range start, YYYY-MM-DD (required when range=custom)

to?string

Custom range end (inclusive), YYYY-MM-DD (required when range=custom; from <= to, at most 366 days)

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/v1/apps/string/overview/deliveries"
{  "delivered": 0,  "failed": 0,  "range": "string",  "series": [    {      "date": "string",      "delivered": 0,      "failed": 0    }  ]}
GET
/v1/apps/{app_id}/overview/devices

Active devices (subscribed, not deleted, seen in the last 30 days; not range-scoped) split by platform, country, app version, permission (granted/denied/provisional/not_determined) and OS major version. Country/version/OS keep the top 5 plus "other" (which also holds unknown values; its OS platform is null). below_min_version counts devices on an app version below the App's min_rich_push_version (0 when unset; unknown versions are not counted).

Authorization

SessionAuth

Path Parameters

app_id*string

App ID

Response Body

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/v1/apps/string/overview/devices"
{  "active": 0,  "below_min_version": 0,  "by_app_version": [    {      "count": 0,      "key": "string"    }  ],  "by_country": [    {      "count": 0,      "key": "string"    }  ],  "by_os": [    {      "count": 0,      "key": "string",      "platform": "android"    }  ],  "by_permission": [    {      "count": 0,      "key": "string"    }  ],  "min_rich_push_version": "string",  "platform": {    "android": 0,    "ios": 0  }}
GET
/v1/apps/{app_id}/overview/failures

Failed deliveries in the range (total) and the top 6 reason codes parsed from last_error: the APNs reason, the FCM errorCode, worker codes (provider_not_configured, app_disabled, device deleted) as-is, or "unknown".

Authorization

SessionAuth

Path Parameters

app_id*string

App ID

Query Parameters

range?string

7d, 14d, 30d, 90d, or custom (default 14d)

from?string

Custom range start, YYYY-MM-DD (required when range=custom)

to?string

Custom range end (inclusive), YYYY-MM-DD (required when range=custom; from <= to, at most 366 days)

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/v1/apps/string/overview/failures"
{  "range": "string",  "reasons": [    {      "code": "string",      "count": 0,      "provider": "fcm"    }  ],  "total": 0}
GET
/v1/apps/{app_id}/overview/funnel

Sent → delivered → opened → clicked counts for the range, overall and per device platform. Opened counts a delivered delivery with an opened or clicked event.

Authorization

SessionAuth

Path Parameters

app_id*string

App ID

Query Parameters

range?string

7d, 14d, 30d, 90d, or custom (default 14d)

from?string

Custom range start, YYYY-MM-DD (required when range=custom)

to?string

Custom range end (inclusive), YYYY-MM-DD (required when range=custom; from <= to, at most 366 days)

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/v1/apps/string/overview/funnel"
{  "funnel": {    "all": {      "clicked": 0,      "delivered": 0,      "opened": 0,      "sent": 0    },    "android": {      "clicked": 0,      "delivered": 0,      "opened": 0,      "sent": 0    },    "ios": {      "clicked": 0,      "delivered": 0,      "opened": 0,      "sent": 0    }  },  "range": "string"}
GET
/v1/apps/{app_id}/overview/heatmap

168 weekday×hour cells (weekday 0 = Monday, hour 0–23, App timezone), zero-filled. sent = delivered deliveries dispatched in that cell; opened = those with an opened or clicked event.

Authorization

SessionAuth

Path Parameters

app_id*string

App ID

Query Parameters

range?string

7d, 14d, 30d, 90d, or custom (default 14d)

from?string

Custom range start, YYYY-MM-DD (required when range=custom)

to?string

Custom range end (inclusive), YYYY-MM-DD (required when range=custom; from <= to, at most 366 days)

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/v1/apps/string/overview/heatmap"
{  "cells": [    {      "hour": 0,      "opened": 0,      "sent": 0,      "weekday": 0    }  ],  "range": "string",  "timezone": "string"}
GET
/v1/apps/{app_id}/overview/kpis

Sent count, delivery rate (delivered/sent), open rate (opened/delivered) and CTR (clicked/delivered) for the range, each with the previous equal-length window, a delta (% for sent, null when prev is 0; percentage points for rates, null when the previous denominator is 0) and a per-day series in the App's timezone. Rates are 0–100 with one decimal.

Authorization

SessionAuth

Path Parameters

app_id*string

App ID

Query Parameters

range?string

7d, 14d, 30d, 90d, or custom (default 14d)

from?string

Custom range start, YYYY-MM-DD (required when range=custom)

to?string

Custom range end (inclusive), YYYY-MM-DD (required when range=custom; from <= to, at most 366 days)

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/v1/apps/string/overview/kpis"
{  "kpis": {    "ctr": {      "delta": 0,      "prev": 0,      "series": [        0      ],      "value": 0    },    "delivery_rate": {      "delta": 0,      "prev": 0,      "series": [        0      ],      "value": 0    },    "open_rate": {      "delta": 0,      "prev": 0,      "series": [        0      ],      "value": 0    },    "sent": {      "delta": 0,      "prev": 0,      "series": [        0      ],      "value": 0    }  },  "range": "string"}
GET
/v1/apps/{app_id}/overview/templates

Top 5 templates by CTR (clicked/delivered) among those with at least 100 deliveries in the range, with open rate and the previous window's CTR (null when it had no deliveries). has_more is true when more templates qualify. Ad-hoc notifications are excluded.

Authorization

SessionAuth

Path Parameters

app_id*string

App ID

Query Parameters

range?string

7d, 14d, 30d, 90d, or custom (default 14d)

from?string

Custom range start, YYYY-MM-DD (required when range=custom)

to?string

Custom range end (inclusive), YYYY-MM-DD (required when range=custom; from <= to, at most 366 days)

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/v1/apps/string/overview/templates"
{  "has_more": true,  "range": "string",  "templates": [    {      "ctr": 0,      "delivered": 0,      "name": "string",      "open_rate": 0,      "prev_ctr": 0,      "template_id": "string"    }  ]}
GET
/v1/apps/{app_id}/overview/usage

The App's rolling 30-day MAU against its Company plan's MAU limit, with the billing cycle (from renewal date and billing interval) and a linear end-of-cycle projection (mau × cycle_days / elapsed_days). plan_is_top_tier is true when the plan has the highest price in the catalog. 404 billing_unavailable on self-hosted deployments; license-server failures surface like the billing endpoints.

Authorization

SessionAuth

Path Parameters

app_id*string

App ID

Response Body

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/v1/apps/string/overview/usage"
{  "cycle_days": 0,  "limit": 0,  "mau": 0,  "plan": "string",  "plan_is_top_tier": true,  "projected_mau": 0,  "renews_at": "string",  "thresholds": [    0  ]}