Skip to main content

Event Analytics

Query in-app event data tracked by your mobile SDKs.

Overview​

These endpoints expose event data from your mobile app's trackEvent() and trackRevenue() calls. All endpoints are scoped to your organization and require the analytics:events permission (Pro and Unlimited plans).

Get Event Overview​

GET /api/analytics/events/overview

Retrieve summary statistics for the Events dashboard header cards.

Authentication​

Requires a valid JWT or API key. See Authentication.

Query Parameters​

ParameterTypeRequiredDefaultDescription
daysnumberNo30Number of days to include (1-365)

Response​

{
"totalEvents": 4821,
"uniqueEventNames": 12,
"eventsToday": 87,
"totalRevenue": 2493.50,
"topEvents": [
{
"eventName": "screen_view",
"count": 1892,
"lastOccurred": "2026-03-03T18:42:00.000Z"
},
{
"eventName": "purchase",
"count": 634,
"lastOccurred": "2026-03-03T18:38:12.000Z"
},
{
"eventName": "signup",
"count": 312,
"lastOccurred": "2026-03-03T17:55:00.000Z"
}
]
}

Example​

curl "https://api.linkforty.com/api/analytics/events/overview?days=30" \
-H "Authorization: Bearer $LINKFORTY_API_KEY"

Get Event Timeline​

GET /api/analytics/events/timeline

Retrieve daily event counts for charting.

Query Parameters​

ParameterTypeRequiredDefaultDescription
daysnumberNo30Number of days to include
eventNamestringNo—Filter to a specific event name

Response​

Returns an array with one entry per day. Days with no events have count: 0.

{
"timeline": [
{ "date": "2026-02-01", "count": 45 },
{ "date": "2026-02-02", "count": 0 },
{ "date": "2026-02-03", "count": 72 }
]
}

Example​

# All events, last 7 days
curl "https://api.linkforty.com/api/analytics/events/timeline?days=7" \
-H "Authorization: Bearer $LINKFORTY_API_KEY"

# Only purchase events
curl "https://api.linkforty.com/api/analytics/events/timeline?days=30&eventName=purchase" \
-H "Authorization: Bearer $LINKFORTY_API_KEY"

List Events​

GET /api/analytics/events/list

Retrieve a paginated feed of individual events.

Query Parameters​

ParameterTypeRequiredDefaultDescription
daysnumberNo30Number of days to include
eventNamestringNo—Filter to a specific event name
pagenumberNo1Page number
limitnumberNo50Events per page (max 100)
searchstringNo—Search event names (case-insensitive)

Response​

{
"events": [
{
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"eventName": "purchase",
"eventData": {
"revenue": 29.99,
"currency": "USD",
"productId": "sku-123"
},
"eventTimestamp": "2026-03-03T18:38:12.000Z",
"installId": "f1e2d3c4-b5a6-0987-fedc-ba0987654321",
"linkId": "11223344-5566-7788-99aa-bbccddeeff00",
"linkShortCode": "abc123",
"linkTitle": "Spring Sale Campaign"
}
],
"total": 634,
"page": 1,
"limit": 50
}

Example​

curl "https://api.linkforty.com/api/analytics/events/list?page=1&limit=10&eventName=purchase" \
-H "Authorization: Bearer $LINKFORTY_API_KEY"

Get Event Names​

GET /api/analytics/events/names

Retrieve all distinct event names with their total counts. Useful for populating filter dropdowns.

Response​

{
"eventNames": [
{ "name": "screen_view", "count": 1892 },
{ "name": "purchase", "count": 634 },
{ "name": "signup", "count": 312 },
{ "name": "revenue", "count": 289 },
{ "name": "add_to_cart", "count": 178 }
]
}

Example​

curl "https://api.linkforty.com/api/analytics/events/names" \
-H "Authorization: Bearer $LINKFORTY_API_KEY"

Export Events​

GET /api/analytics/events/export

Export raw event data in JSON or CSV format. Requires the analytics:export permission.

Query Parameters​

ParameterTypeRequiredDefaultDescription
daysnumberNo30Number of days to include
eventNamestringNo—Filter to a specific event name
formatstringNojsonjson or csv
limitnumberNo1000Max events to return
offsetnumberNo0Offset for pagination

JSON Response​

{
"data": [
{
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"eventName": "purchase",
"eventData": { "revenue": 29.99, "currency": "USD" },
"eventTimestamp": "2026-03-03T18:38:12.000Z",
"installId": "f1e2d3c4-b5a6-0987-fedc-ba0987654321",
"linkId": "11223344-5566-7788-99aa-bbccddeeff00",
"linkShortCode": "abc123",
"linkTitle": "Spring Sale Campaign"
}
],
"pagination": {
"total": 634,
"limit": 1000,
"offset": 0,
"hasMore": false
}
}

CSV Response​

When format=csv, the response is plain text CSV:

id,eventName,eventData,eventTimestamp,installId,linkId,linkShortCode,linkTitle
a1b2c3d4-...,purchase,"{""revenue"":29.99}",2026-03-03T18:38:12.000Z,f1e2d3c4-...,11223344-...,abc123,Spring Sale Campaign

Examples​

# JSON export
curl "https://api.linkforty.com/api/analytics/events/export?days=30&format=json" \
-H "Authorization: Bearer $LINKFORTY_API_KEY"

# CSV export, only purchase events
curl "https://api.linkforty.com/api/analytics/events/export?days=90&eventName=purchase&format=csv" \
-H "Authorization: Bearer $LINKFORTY_API_KEY" \
-o events.csv

Revenue Convention​

All LinkForty SDKs use a standardized format for revenue events:

FieldValue
Event namerevenue
eventData.revenueNumeric amount (e.g., 29.99)
eventData.currencyISO 4217 currency code (e.g., USD)

The totalRevenue field in the overview endpoint sums eventData.revenue from all events with eventName = 'revenue'.

Use trackRevenue() in the SDK rather than manually calling trackEvent('revenue', ...) to ensure this format:

// Correct - uses standardized format
LinkForty.trackRevenue(29.99, 'USD', { orderId: 'order-123' });

// Also works, but prefer trackRevenue()
LinkForty.trackEvent('revenue', { revenue: 29.99, currency: 'USD', orderId: 'order-123' });

Error Responses​

StatusDescription
401Missing or invalid authentication
403Plan does not include event analytics (Free tier)
429API rate limit exceeded

Permissions​

All event analytics endpoints require the analytics:events permission, available to owner, admin, and member roles on Pro and Unlimited plans. The export endpoint additionally requires analytics:export.