Skip to main content
GET
App Analytics
App analytics surface the operational health of your published apps — distinct from the store-level analytics at /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.
array
number
Sum of developer-net amount across all paid transactions (rounded to 2 decimals).
integer
Sum of installCount across all apps.
integer
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.
string
required
App UUID. The caller must own it.
array
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).
integer
Installations that are active with an active or trialing billing status.
integer
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.
string
required
App UUID. The caller must own it.
The aggregate counts are returned under data (wrapped as { status, state, data }):
integer
Total delivery attempts logged.
integer
Deliveries that succeeded.
integer
Deliveries that failed after the final retry.
integer
Deliveries not yet attempted.
integer
Deliveries scheduled for a retry.
For the individual delivery records (with request/response bodies and retry history), use 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.
string
required
App UUID. The caller must own it.
string
required
Function handle, or all for every function in the app.
integer
default:"1"
integer
default:"50"
string
Filter to one execution status.
A companion route, GET /apps/developer/:appId/functions/:handle/runs (limit, status), returns the per-run records the dashboard renders in its runs panel.

Error codes