The REST API gives scripts the same reads the panel shows, with the same definitions: a number you fetch is the number on the screen. It is read-only. It comes with the Pro and Studio plans.
Create a key
Open Settings → Organization → API keys and create a key. It starts with tapll_api_ and is shown once; store it as a secret. A key acts with its own role and on behalf of the person who created it: if they leave the organization, the key stops working.
Don’t confuse it with the SDK’s keys: av_… (client) and sk_… (server) send events in; tapll_api_… reads results out.
Requests
curl https://tapll.com/api/v1/projects \
-H "Authorization: Bearer tapll_api_…"
GET /api/v1/projects lists the organization’s projects. Every other read is GET /api/v1/projects/<project>/<read>, where <project> is the slug from that list:
| Read | What it answers |
|---|---|
live |
People in the app now, with the latest sessions and events |
sessions_overview |
Sessions in a window against the previous one, by day, device, OS, country and version |
sessions |
The newest sessions (page with before; filter by version, install, person, flag, traffic, f) |
sessions/<sessionId> |
One session’s timeline with purchases and subscription state |
people |
People using the app, grouped across devices |
people/<installId>/activity |
One install’s activity |
screens |
Screens by views, time and exits |
retention |
Day-N return rates of install cohorts |
crashes |
Crash issues and the crash-free rate |
crashes/issues/<fingerprint> |
One crash issue in depth |
revenue |
Revenue and subscription movement per source |
revenue/mrr |
Recurring revenue movement |
revenue/transactions |
Newest transactions (limit, source) |
revenue/upcoming |
Upcoming renewals (days 7 or 30) |
revenue/examples |
Paid sessions behind the totals |
releases |
App versions with adoption and stability |
releases/<version> |
One version in depth |
features |
Features with their discovery → adoption → success funnel |
features/<id> |
One feature in depth |
data |
The event catalogue with counts |
data/events/<name> |
One event in depth |
search |
Palette search (q required) |
keywords |
Tracked ASO phrases in a storefront (country) |
keywords/<phraseId> |
One phrase: rank series, rivals, difficulty |
keywords/discover |
Long-tail candidates not tracked yet |
keywords/lookup |
Live look at one term (term required, writes nothing) |
keywords/changes |
Listing changes with search impact |
keywords/impact |
How search contributes sessions |
competitors |
Watched competitors in a storefront |
competitors/<appId> |
One competitor in depth |
competitors/updates |
Rival release feed |
web/overview |
Website traffic in a window |
web/examples |
Newest website visits |
web/goals, web/goals/options |
Goals and what a goal can count |
store |
App Store performance in a storefront |
store/markets |
Per-storefront markets |
store/reviews |
Own reviews, filtered and paged |
store/referrers |
Where product page views came from |
Query parameters, where the read takes them: env (production or sandbox), days (allowed values depend on the read: 1, 7, 28, 30, 90, 180 or 365), platform (ios, android or web), before, f (repeatable dim:value filters), limit, country (2-letter storefront), term/q, channel, referrer, paid, period, plus the id in the path (sessionId, phraseId, appId, …).
A null value means “not counted” (no data reached that day or window), never zero. The full description is at /api/v1/openapi.json (OpenAPI 3.1). Limits: 300 requests a minute per key.