API Reference
Query your analytics data using the Cloud Functions API.
Base URL
https://europe-west1-arktis-ui.cloudfunctions.netCore Endpoints
/ingestIngest tracking events from the tracker script. Includes rate limiting (10,000 events/min/site) and bot filtering.
Request Body
{
"site_id": "uuid",
"events": [
{
"anonymous_id": "string",
"session_id": "string",
"event_type": "pageview" | "event" | "identify" | "convert",
"event_name": "string (optional)",
"page_url": "string",
"page_path": "string",
"page_title": "string",
"referrer": "string",
"user_agent": "string",
"properties": {},
"utm_source": "string",
"utm_medium": "string",
"utm_campaign": "string"
}
]
}Response
{ "success": true, "processed": 1 }Rate Limit: 10,000 events per site per minute. Returns 429 if exceeded.
/getLiveVisitorsGet active sessions from the last 30 minutes.
Query Parameters
| Param | Type | Description |
|---|---|---|
siteId | uuid | Required. Site identifier. |
userId | string | Required. Firebase user ID for auth. |
Response
{
"sessions": [
{
"id": "uuid",
"visitorId": "uuid",
"anonymousId": "string",
"startedAt": "2024-01-15T10:00:00Z",
"lastActivityAt": "2024-01-15T10:05:00Z",
"source": "google",
"medium": "organic",
"landingPage": "/",
"pageCount": 3,
"deviceType": "desktop",
"browser": "Chrome",
"events": [...]
}
]
}/getOverviewGet aggregate statistics for a site.
Query Parameters
| Param | Type | Description |
|---|---|---|
siteId | uuid | Required. Site identifier. |
userId | string | Required. Firebase user ID. |
startDate | date | Optional. YYYY-MM-DD format. |
endDate | date | Optional. YYYY-MM-DD format. |
Response
{
"uniqueVisitors": 1250,
"totalSessions": 3420,
"pageviews": 8750,
"conversions": 125,
"conversionRate": "3.65"
}/createSiteCreate a new site for tracking.
Request Body
{
"name": "My Website",
"domain": "example.com",
"userId": "firebase-user-id"
}Response
{
"id": "uuid",
"name": "My Website",
"domain": "example.com",
"ownerId": "firebase-user-id",
"createdAt": "2024-01-15T10:00:00Z"
}/getSitesGet all sites for a user.
Query Parameters
| Param | Type | Description |
|---|---|---|
userId | string | Required. Firebase user ID. |
Response
{
"sites": [
{
"id": "uuid",
"name": "My Website",
"domain": "example.com",
"ownerId": "firebase-user-id",
"createdAt": "2024-01-15T10:00:00Z"
}
]
}/checkSiteEventsCheck if a site has received any events (for verification).
Query Parameters
| Param | Type | Description |
|---|---|---|
siteId | uuid | Required. Site identifier. |
userId | string | Required. Firebase user ID. |
Response
{
"hasEvents": true,
"eventCount": 42,
"lastEventAt": "2024-01-15T10:05:00Z",
"sampleEvents": [
{
"eventType": "pageview",
"eventName": null,
"pagePath": "/",
"timestamp": "2024-01-15T10:05:00Z"
}
]
}Analytics Endpoints
/getTimeSeriesGet metric values over time for charting.
Query Parameters
| Param | Type | Description |
|---|---|---|
siteId | uuid | Required. Site identifier. |
userId | string | Required. Firebase user ID. |
metric | string | Required. One of: visitors, sessions, pageviews, conversions |
startDate | date | Required. YYYY-MM-DD format. |
endDate | date | Required. YYYY-MM-DD format. |
Response
{
"data": [
{ "date": "2024-01-01", "value": 150 },
{ "date": "2024-01-02", "value": 175 },
{ "date": "2024-01-03", "value": 142 }
]
}/getTopPagesGet most viewed pages with visitor and view counts.
Query Parameters
| Param | Type | Description |
|---|---|---|
siteId | uuid | Required. Site identifier. |
userId | string | Required. Firebase user ID. |
startDate | date | Required. YYYY-MM-DD format. |
endDate | date | Required. YYYY-MM-DD format. |
limit | number | Optional. Default: 20 |
Response
{
"pages": [
{ "path": "/", "views": 1250, "visitors": 980 },
{ "path": "/pricing", "views": 540, "visitors": 420 },
{ "path": "/features", "views": 320, "visitors": 280 }
]
}/getTrafficSourcesGet session counts grouped by source and medium.
Query Parameters
| Param | Type | Description |
|---|---|---|
siteId | uuid | Required. Site identifier. |
userId | string | Required. Firebase user ID. |
startDate | date | Required. YYYY-MM-DD format. |
endDate | date | Required. YYYY-MM-DD format. |
Response
{
"sources": [
{ "source": "google", "medium": "organic", "sessions": 450 },
{ "source": "direct", "medium": null, "sessions": 320 },
{ "source": "twitter", "medium": "social", "sessions": 180 }
]
}/getDeviceBreakdownGet session counts by browser, OS, and device type.
Query Parameters
| Param | Type | Description |
|---|---|---|
siteId | uuid | Required. Site identifier. |
userId | string | Required. Firebase user ID. |
startDate | date | Required. YYYY-MM-DD format. |
endDate | date | Required. YYYY-MM-DD format. |
Response
{
"browsers": [
{ "name": "Chrome", "sessions": 650 },
{ "name": "Safari", "sessions": 280 },
{ "name": "Firefox", "sessions": 120 }
],
"os": [
{ "name": "macOS", "sessions": 480 },
{ "name": "Windows", "sessions": 420 },
{ "name": "iOS", "sessions": 150 }
],
"devices": [
{ "type": "desktop", "sessions": 780 },
{ "type": "mobile", "sessions": 250 },
{ "type": "tablet", "sessions": 20 }
]
}/exportDataExport events, sessions, or visitors as JSON or CSV.
Query Parameters
| Param | Type | Description |
|---|---|---|
siteId | uuid | Required. Site identifier. |
userId | string | Required. Firebase user ID. |
type | string | Required. One of: events, sessions, visitors |
format | string | Optional. json (default) or csv |
startDate | date | Optional. YYYY-MM-DD format. |
endDate | date | Optional. YYYY-MM-DD format. |
limit | number | Optional. Max rows. Default: 10000 |
Response (JSON)
{
"data": [...],
"count": 1500,
"format": "json"
}Response (CSV)
id,visitor_id,session_id,event_type,page_path,timestamp abc123,v1,s1,pageview,/,2024-01-15T10:00:00Z def456,v1,s1,pageview,/pricing,2024-01-15T10:01:00Z
Organization Endpoints
/createOrganizationCreate a new organization. The creating user becomes the owner.
Request Body
{
"name": "My Company",
"userId": "firebase-user-id"
}Response
{
"id": "uuid",
"name": "My Company",
"slug": "my-company",
"ownerId": "firebase-user-id",
"createdAt": "2024-01-15T10:00:00Z"
}/getOrganizationsGet all organizations the user belongs to.
Query Parameters
| Param | Type | Description |
|---|---|---|
userId | string | Required. Firebase user ID. |
Response
{
"organizations": [
{
"id": "uuid",
"name": "My Company",
"slug": "my-company",
"ownerId": "user123",
"role": "owner",
"memberCount": 5,
"siteCount": 3,
"createdAt": "2024-01-15T10:00:00Z"
}
]
}/inviteMemberInvite a user to join an organization. Requires owner or admin role.
Request Body
{
"orgId": "uuid",
"email": "newmember@example.com",
"role": "member",
"userId": "firebase-user-id"
}Available Roles
admin- Can manage members and sitesmember- Can view and edit dataviewer- Read-only access
Response
{
"id": "uuid",
"email": "newmember@example.com",
"role": "member",
"invitedAt": "2024-01-15T10:00:00Z",
"status": "pending"
}/getOrganizationMembersGet all members of an organization.
Query Parameters
| Param | Type | Description |
|---|---|---|
orgId | uuid | Required. Organization identifier. |
userId | string | Required. Firebase user ID. |
Response
{
"members": [
{
"id": "uuid",
"userId": "user123",
"email": "owner@example.com",
"role": "owner",
"acceptedAt": "2024-01-15T10:00:00Z"
},
{
"id": "uuid",
"userId": null,
"email": "pending@example.com",
"role": "member",
"invitedAt": "2024-01-16T10:00:00Z",
"acceptedAt": null
}
]
}/updateMemberRoleUpdate a member's role. Requires owner or admin role.
Request Body
{
"orgId": "uuid",
"memberId": "uuid",
"role": "admin",
"userId": "firebase-user-id"
}Response
{ "success": true }/removeMemberRemove a member from an organization. Requires owner or admin role.
Request Body
{
"orgId": "uuid",
"memberId": "uuid",
"userId": "firebase-user-id"
}Response
{ "success": true }/acceptInviteAccept a pending organization invitation.
Request Body
{
"orgId": "uuid",
"userId": "firebase-user-id",
"email": "user@example.com"
}Response
{
"success": true,
"organization": {
"id": "uuid",
"name": "My Company",
"role": "member"
}
}/addSiteToOrgAssign a site to an organization. Requires site ownership and org admin role.
Request Body
{
"siteId": "uuid",
"orgId": "uuid",
"userId": "firebase-user-id"
}Response
{ "success": true }Error Handling
All endpoints return errors in a consistent format:
{
"error": "Error message describing what went wrong"
}Common Status Codes
200- Success400- Bad request (missing parameters)403- Forbidden (not authorized)404- Not found429- Rate limit exceeded500- Internal server error