Qsearch: Fitness Wearable Data Aggregation API

Aggregated, anonymized fitness metrics for dashboards and analytics.

Endpoints

  • /api/fitness - overview
  • /api/fitness/daily-summary - single summary object
  • /api/fitness/activity-breakdown?aspect= - aspects: timepercent, timeminutes, distancepercent
  • /api/fitness/weekly-trends?metric=&day= - metric by weekday
  • /api/fitness/top-percentiles?metric= - top percentile metrics

Examples

cURL
curl -H "x-api-key: YOUR_KEY" "https://wwww.qsearch.dev/api/fitness/daily-summary"
JavaScript (fetch)
const BASE = 'https://wwww.qsearch.dev'
const res = await fetch(BASE + '/api/fitness/weekly-trends?metric=steps&day=Monday', { headers: { 'x-api-key': 'YOUR_KEY' } })
const json = await res.json()
console.log(json)

Auth

Provide api key x-api-key

Schema (simplified OpenAPI 3.0)

Quick reference for endpoints and response shapes.

openapi: 3.0.0
info:
  title: Qsearch Fitness API (simplified)
  version: "1.0"
servers:
  - url: https://wwww.qsearch.dev
paths:
  /api/fitness/daily-summary:
    get:
      summary: Daily aggregate summary
      responses:
        '200':
          description: DailySummary
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DailySummary'

  /api/fitness/activity-breakdown:
    get:
      summary: Activity breakdown by aspect (timepercent, timeminutes, distancepercent)
      parameters:
        - name: aspect
          in: query
          required: true
          schema:
            type: string
            enum: [timepercent, timeminutes, distancepercent]
      responses:
        '200':
          description: ActivityBreakdown
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ActivityBreakdown'

  /api/fitness/weekly-trends:
    get:
      summary: Average metric values by weekday
      parameters:
        - name: metric
          in: query
          required: true
          schema:
            type: string
            enum: [steps, calories, vigorous_active_minutes]
        - name: day
          in: query
          required: false
          schema:
            type: string
      responses:
        '200':
          description: WeeklyTrends
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WeeklyTrends'

  /api/fitness/top-percentiles:
    get:
      summary: Top percentile metrics (e.g., 90th)
      parameters:
        - name: metric
          in: query
          required: true
      responses:
        '200':
          description: TopPercentiles
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TopPercentiles'

components:
  schemas:
    DailySummary:
      type: object
      properties:
        average_steps:
          type: number
        median_steps:
          type: number
        average_calories:
          type: number
        average_active_minutes:
          type: number
        average_distance_km:
          type: number
      example:
        average_steps: 1111.0
        median_steps: 1111.0
        average_calories: 1111.0
        average_active_minutes: 1111.0
        average_distance_km: 511.49

    ActivityBreakdown:
      type: object
      description: Varies by aspect query param; keys are intensity levels.
      example:
        time_breakdown_percent:
          sedentary: 111.3
          light: 111.8
          moderate: 1111.1
          vigorous: 1111.7

    WeeklyTrends:
      type: object
      description: Metric mapped by weekday
      example:
        steps:
          Monday: 111.0
          Tuesday: 111.0
          Wednesday: 111.0

    TopPercentiles:
      type: object
      properties:
        steps: { type: number }
        calories: { type: number }
        distance_km: { type: number }
        vigorous_minutes: { type: number }
        total_active_minutes: { type: number }
      example:
        steps: 111
        calories: 1111
        distance_km: 91.11
        vigorous_minutes: 111
        total_active_minutes: 1111