Skip to main content

Overview

Two families of endpoints are available:
  • Dashboard analytics (/api/v1/analytics/*) — the aggregated KPI, timeseries, funnel, retention, and activity data that backs the console dashboard. These use Customer JWT authentication (Authorization: Bearer <token>) and are scoped to the authenticated user’s tenant_id and app_id. They power the console UI, so response shapes track the dashboard.
  • Event export (/api/v1/sdk/events/export*) — raw SDK event access for your own pipelines. These authenticate with an API key that has the export_data permission (x-api-key header), the stable programmatic surface.
All endpoints are scoped to a single tenant_id + app_id. There is no way to query across tenants or applications.

Dashboard Analytics

Analytics data has a processing delay of up to ~5 minutes from event ingestion.

KPI Dashboard

Authentication: Customer JWT Returns the KPI tiles configured for the dashboard, each with current/previous values and a sparkline. Query parameters (all optional): Response:
metric is one of the supported metric identifiers (see Metric identifiers). trend is up, down, or flat.

KPI Timeseries

Authentication: Customer JWT Returns one series per requested metric at the requested granularity. Query parameters: Response:
When compare is set, each metric object also carries a compare_data array (same shape as data) and a compare_label. When segment is not overall, each point additionally carries a breakdown_value.

Funnel Analysis

Authentication: Customer JWT Returns the step-by-step conversion for a named funnel, for the latest available date. Path parameter: Response:

Retention Cohorts

Authentication: Customer JWT Returns retention curves per acquisition cohort. Query parameters (all optional): Response:
retention values are the percentage of the cohort still active on day N.

Activity Feed

Authentication: Customer JWT Returns the 20 most recent workspace activity entries (configuration changes, publishes, key rotations, and similar) — the feed shown on the dashboard. This endpoint takes no query parameters. Response:

Metric identifiers

kpis and kpis/timeseries accept these metric identifiers:
trial_to_paid_d7 / trial_to_paid_d30 count a trial-conversion renewal or a later non-trial purchase of the same subscription product.

Event Export

Export raw SDK events for your own warehouse or analysis. All export endpoints authenticate with an API key that has the export_data permission, sent in the x-api-key header. Grant the permission when you create the key in the dashboard.
Export request dates use full ISO 8601 timestamps (e.g. 2026-02-01T00:00:00Z), not date-only strings.

Paginated export (synchronous)

Query parameters: Response:
Page through the result set with limit + offset until meta.hasMore is false.

Direct download

Streams the matching events as a single file. Same date/event filters as the paginated endpoint, plus a format parameter (json — default — or csv).

Async bulk export

For large windows, start an asynchronous export and be notified when it is ready. 1. Start the export
Request body:
event_names and callback_url are optional. A callback_url must be an HTTPS URL whose host resolves only to public internet addresses; anything else (HTTP, a private, loopback or link-local address, an internal host name) is refused with 400. The response is 202 Accepted with the export record:
2. Poll for status
Returns the same record; when status becomes completed, download_url and the summary fields below are populated. Export record fields: 3. Download the export Once status is completed, fetch the file from the download_url:
Streams the exported events as a JSON attachment (Content-Disposition: attachment; filename="export-{id}.json"). Returns 409 if the export is not yet completed or has passed its expires_at, and 404 for an unknown id. Uses the same x-api-key + export_data auth. 4. Optional callback If you supplied a callback_url, AppDNA POSTs this body to it when the export completes (a failed export sends no callback, so poll the status endpoint above). The target is checked again before the POST, redirects are not followed, and the callback is not retried:
download_url is a path, not a full URL: prefix it with the API host you called (for example https://api.appdna.ai) and send your x-api-key, as in step 3.
Exports are time-limited. Fetch the file before expires_at (24 hours after the export completes); after that the download returns 409 — start a new export.

Event schema

Returns the event schema (event names and their known properties) for the app, so you can build a stable ingestion mapping before exporting.