GraphQL API

Apollo Federation v2.3 subgraph — 2 resolvers, 15 queries for metrics, time series, cohort analysis, and attribution.

Endpoints

EnvironmentURL
Localhttp://localhost:4004/graphql
Staginghttps://staging-api.eventzr.com/graphql
Productionhttps://api.eventzr.com/graphql

Authentication

All authenticated GraphQL operations require a valid JWT token. Tenant isolation is automatic — all queries are scoped to the tenantId from JWT claims. Public queries do not require authentication.

Authorization headertext
Authorization: Bearer <JWT>

Core Types

AnalyticsMetrics

AnalyticsMetrics typegraphql
type AnalyticsMetrics @key(fields: "entityId") {
  entityId: ID!
  entityType: String!
  tenantId: String!
  traffic: TrafficMetrics
  engagement: EngagementMetrics
  transactions: TransactionMetrics
  timeRange: String!
}

TrafficMetrics

TrafficMetrics typegraphql
type TrafficMetrics {
  pageViews: Int!
  uniqueVisitors: Int!
  sessions: Int!
  bounceRate: Float!
  avgSessionDuration: Float!
  topReferrers: [ReferrerStats!]
}

EngagementMetrics

EngagementMetrics typegraphql
type EngagementMetrics {
  clicks: Int!
  scrollDepth: Float!
  formSubmissions: Int!
  videoPlays: Int!
  videoCompletions: Int!
  shareCount: Int!
}

TransactionMetrics

TransactionMetrics typegraphql
type TransactionMetrics {
  totalRevenue: Float!
  ticketsSold: Int!
  avgOrderValue: Float!
  conversionRate: Float!
  refundRate: Float!
}

Authenticated Queries (AnalyticsResolver)

Get entity metricsgraphql
query GetAnalyticsMetrics($input: MetricsInput!) {
  analyticsMetrics(input: $input) {
    entityId
    entityType
    traffic {
      pageViews
      uniqueVisitors
      bounceRate
    }
    engagement {
      clicks
      formSubmissions
    }
    transactions {
      totalRevenue
      ticketsSold
      conversionRate
    }
    timeRange
  }
}
Get time series datagraphql
query GetTimeSeries($input: TimeSeriesInput!) {
  analyticsTimeSeries(input: $input) {
    dataPoints {
      timestamp
      value
      label
    }
    granularity
    startDate
    endDate
  }
}
Compare entitiesgraphql
query CompareEntities($input: ComparisonInput!) {
  analyticsComparison(input: $input) {
    entities {
      entityId
      entityType
      metrics {
        totalRevenue
        ticketsSold
      }
    }
    winner
    insights
  }
}

Additional authenticated queries: analyticsTrends, analyticsTopEntities, analyticsCohortAnalysis, analyticsAttribution

Public Queries (PublicResolver)

These queries do not require authentication and return public-facing statistics.

Get public event statsgraphql
query PublicEventStats($eventSlug: String!) {
  publicEventStats(eventSlug: $eventSlug) {
    totalAttendees
    avgRating
    reviewCount
    shareCount
  }
}
Get trending eventsgraphql
query TrendingEvents($limit: Int) {
  trendingEvents(limit: $limit) {
    eventId
    title
    slug
    trendScore
    ticketsSold
    category
  }
}

Additional public queries: publicVenueStats, publicDestinationStats, publicArtistStats, trendingEventsByCategory, trendingEventsByLocation, publicSiteStats

Federation

Apollo Federation v2.3

The analytics-svc contributes AnalyticsMetrics entities to the EventZR federated graph. Other services can reference analytics data using Federation directives.

Directives used: @key, @shareable, @external, @requires, @provides