App Analytics
App Analytics
App Analytics
Developer analytics: aggregate installs and revenue, per-app installations, webhook delivery health, and function execution logs.
GET
App Analytics
App analytics surface the operational health of your published apps —
distinct from the store-level analytics at
The aggregate counts are returned under
For the individual delivery records (with request/response bodies and retry
history), use
A companion route,
/api/v1/analytics/* (which report
a merchant’s sales / orders / customers, not the app developer’s own metrics).
These endpoints are read by the developer dashboard in the admin and are
scoped to the calling developer account. They live under the developer
namespace /apps/developer/... — there is no /apps/developer/:appId/analytics/*
sub-namespace; the capabilities below are split across the real routes.
Auth: developer JWT (MERCHANT or PARTNER role). The storeId /
developer account is resolved from the token; per-app routes additionally
verify that the caller owns the :appId.
The merchant-facing
/api/v1/analytics/* endpoints documented in
Analytics overview report a different
metric set (sales, orders, conversion) and require the read_analytics OAuth
scope. The developer routes below are JWT-only and have no OAuth scope.Aggregate analytics
GET /apps/developer/analytics
Returns a flat aggregate across all of the developer’s apps — per-app
install counts and ratings, plus total developer-net revenue, installs, and
paid-transaction count. There is no :appId param and no day-bucketed
time series.
Sum of developer-net amount across all paid transactions (rounded to 2 decimals).
Sum of
installCount across all apps.Count of paid billing transactions.
Per-app installations
GET /apps/developer/:appId/installations
Returns the raw installation rows for one app (with the installing store
attached), plus an active-subscriber count and total-install count. This is a
list, not a bucketed series.
App UUID. The caller must own it.
Installation rows, newest first. Each includes
installationId, storeId,
status, billingStatus, installedVersion, autoUpdate,
pinnedVersion, billingStartDate, trialEndsAt, createdAt,
updatedAt, and a nested store (id, business, storeURL, email).Installations that are active with an active or trialing billing status.
Installations not pending uninstall.
Webhook delivery health
GET /apps/developer/:appId/webhook-deliveries/stats
Aggregate delivery counts across all of the app’s registered webhooks.
Delivery uses 3-retry exponential backoff (1m / 5m / 15m); a delivery is
counted as failed only after the final retry returns non-2xx.
App UUID. The caller must own it.
data (wrapped as
{ status, state, data }):
Total delivery attempts logged.
Deliveries that succeeded.
Deliveries that failed after the final retry.
Deliveries not yet attempted.
Deliveries scheduled for a retry.
GET /apps/developer/:appId/webhook-deliveries (paged via
page, limit, and optional status / topic filters).
Function execution logs
GET /apps/developer/:appId/functions/:handle/logs
Paged execution-log records for one function. Pass all as the :handle to
pull a unified feed across every function in the app.
App UUID. The caller must own it.
Function handle, or
all for every function in the app.Filter to one execution status.
GET /apps/developer/:appId/functions/:handle/runs
(limit, status), returns the per-run records the dashboard renders in its
runs panel.
Error codes
| Code | Description |
|---|---|
401 | Missing or invalid developer JWT. |
403 | The calling developer does not own this app (per-app routes). |